【问题标题】:Spark UDF returning more than one itemSpark UDF 返回多个项目
【发布时间】:2017-05-11 07:04:35
【问题描述】:

火花 UDF 是否可以返回多个值?如果是这样,如何在数据框 API 中访问各个项目。

【问题讨论】:

  • UDF 只能返回单列值。这些值可以是集合或元组,但不能是多个值。如果你真的需要,你可以返回一个元组,然后使用$"colname_1"$"colname_2" 等命令拆分它

标签: scala apache-spark apache-spark-sql


【解决方案1】:

您有三个选择:

  • 返回一个Seq 相同类型的项目以创建array 列。

    udf(() => Seq(1.0, 2.0, 3.0))
    
  • 返回一个Map

    udf(() => Map("x" -> 1.0, "y" -> -1.0))
    
  • 返回一个产品(元组或案例类的实例)以创建struct 列。

    udf(() => (1.0, "foo", 5))
    

【讨论】:

  • 谢谢。问题的第二部分怎么样?我目前的解决方案是添加一个额外的选择操作来访问单个项目。是否有另一种方法来展平返回的值?
  • 我不这么认为。
【解决方案2】:

您可以使用 structarray 方法来实现这一点。

请查看here 以获得由@ramesh 提供的非常简洁的答案

【讨论】:

    猜你喜欢
    • 2017-02-05
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多