【问题标题】:Spark UDF error - Schema for type Any is not supportedSpark UDF 错误 - 不支持 Any 类型的架构
【发布时间】:2019-01-29 01:00:15
【问题描述】:

我正在尝试创建一个 udf,它将用 0 替换列中的负值。

我的数据框是 - 称为 df,并且包含一列称为 avg_x。 这是我创建 udf 的代码

val noNegative = udf {(avg_acc_x: Double) => if(avg_acc_x < 0) 0 else "avg_acc_x"}

我收到此错误

java.lang.UnsupportedOperationException: Schema for type Any is not supported

df.printSchema 返回

|-- avg_acc_x: double (nullable = false) 

所以我不明白为什么会出现这个错误?

【问题讨论】:

    标签: apache-spark apache-spark-sql spark-dataframe


    【解决方案1】:

    这是因为 else 返回了 String: "avg_acc_x"。去掉引号:

    val noNegative = udf {(avg_acc_x: Double) => if(avg_acc_x < 0) 0 else avg_acc_x}
    

    【讨论】:

      【解决方案2】:

      这个错误基本上是Analyzer无法正确解析udf的类型时出现的。也就是说,类型是混合的(Int 和 String)。

      因此,

      if(avg_acc_x &lt; 0) 0 else avg_acc_x(整数类型)

      if(avg_acc_x &lt; 0) "0" else "avg_acc_x"(字符串类型)

      应该解决这个异常。

      【讨论】:

        猜你喜欢
        • 2018-02-26
        • 2021-05-12
        • 1970-01-01
        • 2017-06-26
        • 1970-01-01
        • 1970-01-01
        • 2017-03-23
        • 2017-09-24
        • 1970-01-01
        相关资源
        最近更新 更多