sparkSQL中udf的使用
阿新 • • 發佈:2017-07-04
class from lock all function apache ol3 clas name
在Spark中使用sql時一些功能需要自定義方法實現,這時候就可以使用UDF功能來實現
多參數支持
UDF不支持參數*
的方式輸入多個參數,例如String*
,不過可以使用array來解決這個問題。
定義udf方法,此處功能是將多個字段合並為一個字段
def allInOne(seq: Seq[Any], sep: String): String = seq.mkString(sep)
在sql中使用
sqlContext.udf.register("allInOne", allInOne _) //將col1,col2,col3三個字段合並,使用‘,‘分割 val sql = """|select allInOne(array(col1,col2,col3),",") as col |from tableName """.stripMargin sqlContext.sql(sql).show()
在DataFrame中使用
import org.apache.spark.sql.functions.{udf,array,lit} val myFunc = udf(allInOne _) val cols = array("col1","col2","col3") val sep = lit(",") df.select(myFunc(cols,sep).alias("col")).show()
sparkSQL中udf的使用