列の負の値を0に置き換えるudfを作成しようとしています。
私のデータフレームは– dfと呼ばれ、avg_xと呼ばれる1つの列が含まれています。これは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)
なぜこのエラーが発生しているのか分かりませんか?
これは、else
がString
を返すためです:"avg_acc_x"
。引用符を取り除いてください:
val noNegative = udf {(avg_acc_x: Double) => if(avg_acc_x < 0) 0 else avg_acc_x}
このエラーは基本的に、アナライザーがudfのタイプを適切に解決できない場合に発生します。つまり、タイプが混在しています(IntとString)。
したがって、
if(avg_acc_x < 0) 0 else avg_acc_x
(整数型)
または
if(avg_acc_x < 0) "0" else "avg_acc_x"
(文字列型)
この例外を解決する必要があります。