我正在尝试创建一个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)
所以我不明白为什么会出现这个错误?
答案 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"
(字符串类型)
应该解决该异常。