【问题标题】:UDF vs custom expressionUDF 与自定义表达式
【发布时间】:2016-07-01 23:47:21
【问题描述】:

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

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

【问题讨论】:

  • 我找到了答案,但不是我的。 forums.databricks.com/answers/2706/view.html。看起来表达式有点像可以参与 Catalyst 和 Tungsten 优化的 UDF 版本。 (普通的UDF,即使是Scala的UDF也做不到。)貌似需要用Scala写,但是写好后,可以加上python API。

标签: scala apache-spark


【解决方案1】:

UDF:

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

表达式:

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

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

【讨论】:

  • 谢谢!我在哪里可以阅读有关它的更多详细信息?虽然我对这些有一些模糊的直觉,但我实际上并不知道这些概念。例如,我认为“不透明”只是意味着 Catalyst 可以优化它,但显然还有更多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
相关资源
最近更新 更多