Spark UDF 错误 - 不支持 Any 类型的模式

Spark UDF error - Schema for type Any is not supported

我正在尝试创建一个 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 returns

|-- avg_acc_x: double (nullable = false) 

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

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

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

这个错误主要发生在Analyzer无法正确解析udf类型的时候。即类型混合(Int和String)。

因此,

if(avg_acc_x < 0) 0 else avg_acc_x(整数类型)

if(avg_acc_x < 0) "0" else "avg_acc_x"(字符串类型)

应该解决这个异常。