Spark UDF错误 - 不支持类型为Any的架构

时间:2016-05-23 13:52:52

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

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

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

2 个答案:

答案 0 :(得分:14)

这是因为else返回String"avg_acc_x"。拿掉报价:

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

答案 1 :(得分:0)

当分析器无法正确解析udf类型时,基本上会发生此错误。也就是说,类型是混合的(Int和String)。

因此

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

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

应该解决该异常。