web-dev-qa-db-ja.com

Sparkデータフレーム内のすべての「:」を「_」に置き換えます

Sparkデータフレームの単一の列にある「:」->「_」のすべてのインスタンスを置き換えようとしています。これを次のようにしようとしています:

val url_cleaner = (s:String) => {
   s.replaceAll(":","_")
}
val url_cleaner_udf = udf(url_cleaner)
val df = old_df.withColumn("newCol", url_cleaner_udf(old_df("oldCol")) )

しかし、私はエラーを受け取り続けます:

 SparkException: Job aborted due to stage failure: Task 0 in stage 25.0 failed 4 times, most recent failure: Lost task 0.3 in stage 25.0 (TID 692, ip-10-81-194-29.ec2.internal): Java.lang.NullPointerException

Udfのどこが間違っているのですか?

5
Feynman27

おそらく、この列にはいくつかのnullがあります。

試してください:

_val urlCleaner = (s:String) => {
   if (s == null) null else s.replaceAll(":","_")
}
_

独自の関数の代わりにregexp_replace(col("newCol"), ":", "_")を使用することもできます

13
T. Gawęda