ScalaのDataFrame
に値を転置する際に問題が発生しています。 DataFrame
私の初期には、次のようになります。Spark:データフレームにUDFを適用するDFの値に基づいて新しい列を生成する
+----+----+----+----+
|col1|col2|col3|col4|
+----+----+----+----+
| A| X| 6|null|
| B| Z|null| 5|
| C| Y| 4|null|
+----+----+----+----+
col1
とcol2
はタイプString
とcol3
あるとcol4
はInt
です。
そして結果は次のようになります。3つの新しい列がcol1
、col2
と値が抽出されている列にちなんで命名されなければならないことを意味
+----+----+----+----+------+------+------+
|col1|col2|col3|col4|AXcol3|BZcol4|CYcol4|
+----+----+----+----+------+------+------+
| A| X| 6|null| 6| null| null|
| B| Z|null| 5| null| 5| null|
| C| Y| 4| 4| null| null| 4|
+----+----+----+----+------+------+------+
。抽出された値は、null
ではない値に応じて、col2
、col3
またはcol5
の列から取得されます。
どのように達成するには?私が最初にこのようなUDF
考える:
def myFunc (col1:String, col2:String, col3:Long, col4:Long) : (newColumn:String, rowValue:Long) = {
if col3 == null{
val rowValue=col4;
val newColumn=col1+col2+"col4";
} else{
val rowValue=col3;
val newColumn=col1+col2+"col3";
}
return (newColumn, rowValue);
}
val udfMyFunc = udf(myFunc _) //needed to treat it as partially applied function
しかし、どのように私は正しい方法でデータフレームからそれを呼び出すことができますか?
もちろん、上記のコードはすべてゴミであり、はるかに良い方法があるかもしれません。私はちょうど最初のコードスニペットをゆがんでいるので、私に知らせてください... Int
の値をnull
に比較することは、既に機能していません。
ご協力いただきましてありがとうございます。ありがとう!
[Apache Spark - 複数のデータフレーム列にUDFの結果を割り当てる]可能な複製(http://stackoverflow.com/questions/35322764/apache-spark-assign-the-result-of-udf-to- – jwvh