UDF与自定义表达式

max*_*max 3 scala apache-spark

就Spark DataFrame / SQL上下文而言,UDF和自定义表达式之间有什么区别?尤其是它们对Catalyst都是不透明的吗?使用一个vs另一个的原因是什么?

(例如,此处提到了自定义表达式-尽管在这种情况下不需要它们。)

小智 5

UDF:

  • 对Scala类型进行操作(您可以访问UDT)
  • 被标记为不确定的
  • 无法在执行计划中移动
  • 不能用于代码生成

表达:

  • 在催化剂类型上运行
  • 可以标记为确定性/非确定性
  • 可以用于代码生成,但不是全部实现
  • 可以在执行计划中移动

两者-都是不透明的,除非有特定表达的催化剂规则支持