とオプションを使用するためにどのように私はこのようなデータセットを持っている:は、Spark UDF
+----+------+
|code|status|
+-----------+
| 1| "new"|
| 2| null|
| 3| null|
+----+------+
私は両方の列に依存してUDFを書きたいと思います。
df.withColumn("new_column",
when(pst_regs("status").isNull,
myFnUdf($"code", lit(false))
)
.otherwise(
myFnUdf($"code", lit(true))
)
)
アプローチUDFにnullを処理するには:
は、私はそれがUDF外null
を処理し、2番目のパラメータとしてのブールを取るためにmyFn
を書くことですthis answerにおける第二のアプローチ、次の作業です私が見たのはで引数を囲むことについて語っているthis answerです。私はこのようなコードを試してみました:
df.withColumn("new_column", myFnUdf($"code", $"status"))
def myFn(code: Int, status: String) = (code, Option(status)) match {
case (1, "new") => "1_with_new_status"
case (2, Some(_)) => "2_with_any_status"
case (3, None) => "3_no_status"
}
をしかしnull
の行がtype mismatch; found :None.type required String
を与えます。私はまた、udfの作成中に成功せずにOption
で引数をラップしようとしました。 (オプションなし)この基本的な形は次のようになります。
myFnUdf = udf[String, Int, String](myFn(_:Int, _:String))
私はスカラ座に新たなんだので、私は、単純な何かが欠けてると確信しています。私の混乱の一部は、関数からudfsを作成するための異なる構文(例えば、https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-sql-udfs.html)である可能性があるので、私は最良の方法を使用しているかどうかはわかりません。どんな助けにも感謝! @ user6910411あたり行方不明(1, "new")
ケースと@sgvdコメントを追加するには、編集
EDIT
。
ありがとう@sgvd。私は両方の方法で作業しました(そして、欠落したケースを含めるように質問を更新しました)。あなたの助けに感謝。 –