【问题标题】:What is the more efficient output type for an UDF to return an arrayUDF返回数组的更有效的输出类型是什么
【发布时间】:2018-05-29 09:26:26
【问题描述】:

我正在使用 Spark SQL,并且 UDF 用于计算 ArrayType 类型的列

就性能而言,最快的输出类型是什么?

Spark 接受 trait Seq 的任何实现,但我认为它在内部由 WrappedArray 表示(进入钨)。

所以我想知道是否最好返回 Array 而不是 Vector 例如,以避免一些编码。

【问题讨论】:

  • spark sql 应该更好,因为它针对 JVM 进行了优化,而 udf 需要昂贵的序列化和反序列化

标签: apache-spark apache-spark-sql


【解决方案1】:

我认为它在内部由 WrappedArray(钨)表示。

事实并非如此。 WrappedArray(字面意思是 Array 扩充以适应 scala.collection API)是外部表示。内部表示(不包括原始类型)不依赖于标准 Scala API。

所以我想知道返回一个数组而不是一个向量是否更好,以避免一些编码。

这不会有什么不同。 udf 的输出是逐个元素完全编码的。无法避免返回值的完整副本。

如果无法使用(相当有限的)SQL API 完成处理,那么您将无法使用现有的东西,直到 Databricks 开源更高阶函数 API。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 2019-12-30
    • 1970-01-01
    • 2021-03-15
    • 2021-04-13
    相关资源
    最近更新 更多