据我所知,为了做到这一点,你必须
对于使用SQLContext
function
SQLContext
function
SQLContext
作为简单的函数spark.sqlContext.udf.register("myUDF",myFunc)
UserDefinedFunction
DataFrame
def myUDF = udf(myFunc)
有没有办法将这一步合并到一个步骤中,使udf
对这两个步骤都可用?此外,对于存在用于DataFrame
但不用于SQL的函数的情况,如何在不再次复制代码的情况下注册它?
发布于 2017-04-19 08:31:35
带有scala.FunctionN
的UDFRegistration.register
变体返回一个UserDefinedFunction
,这样您就可以在单个步骤中注册SQL函数并创建DSL友好的UDF:
val timesTwoUDF = spark.udf.register("timesTwo", (x: Int) => x * 2)
spark.sql("SELECT timesTwo(1)").show
+---------------+
|UDF:timesTwo(1)|
+---------------+
| 2|
+---------------+
spark.range(1, 2).toDF("x").select(timesTwoUDF($"x")).show
+------+
|UDF(x)|
+------+
| 2|
+------+
发布于 2017-11-22 09:56:12
您可以使用以下代码,并仍然将其应用于dataframe
spark.sqlContext.udf.register("myUDF", myFunc)
在对数据帧转换调用selectExpr时使用它。
df.selectExpr("myUDF(col1) as modified_col1")
https://stackoverflow.com/questions/43484269
复制相似问题