web-dev-qa-db-ja.com

Spark UDFエラー-タイプAnyのスキーマはサポートされていません

列の負の値を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) 

なぜこのエラーが発生しているのか分かりませんか?

8
other15

これは、elseStringを返すためです:"avg_acc_x"。引用符を取り除いてください:

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

このエラーは基本的に、アナライザーがudfのタイプを適切に解決できない場合に発生します。つまり、タイプが混在しています(IntとString)。

したがって、

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

または

if(avg_acc_x < 0) "0" else "avg_acc_x"(文字列型)

この例外を解決する必要があります。

1
ColJarmen