我知道UDF
s是Spark的完整黑盒,并且不会尝试优化它。但使用Column
类型及其功能列在:(https://spark.apache.org/docs/2.1.0/api/scala/index.html#org.apache.spark.sql.Column)
使功能“符合”Catalyst Optimizer
?。UDF's vs Spark sql vs列表达式性能优化
例如,UDF
通过添加1
到现有列
val addOne = udf((num: Int) => num + 1)
df.withColumn("col2", addOne($"col1"))
相同功能来创建一个新的列,使用Column
类型:
def addOne(col1: Column) = col1.plus(1)
df.withColumn("col2", addOne($"col1"))
或
spark.sql("select *, col1 + 1 from df")
将性能之间有任何差异恩他们?
我不知道如果数据集选择是为在你的例子'df.as [Int] .map(num =>(num,num + 1))中,UDF方法不好[ –
]对不起,延迟@DanieldePaula和@YosiDahari,我把一个大的'UDF'转换为只使用'Column'类型,我确实看到了一些改进。我仍然不知道它将如何处理大数据。 – vdep