UDF与自定义表达式

时间:2016-07-01 23:47:21

标签: scala apache-spark

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

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

1 个答案:

答案 0 :(得分:3)

UDF:

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

表达式:

  • 使用催化剂类型
  • 可以标记为确定性/非确定性
  • 可用于codegen但不是全部实现
  • 可以在执行计划中移动

这两个 - 除非由表达式特定的催化剂规则支持,否则是不透明的