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"
(字符串类型)
应该解决这个异常。
我正在尝试创建一个 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"
(字符串类型)
应该解决这个异常。