文字列型の「年齢」列を持つデータフレームがあり、次の形式で値を変更したいと考えています。
入力値の例
Age
=====
0
null
NaN
999
200
35
25-30
45
null
NaN
35-40
======
必要な出力
Age
=====
0
999
0
999
999
35
27
45
999
0
37
======
今まで試したコード
val formatted_df1 = df.withColumn("age", regexp_replace(col("age"), "null", "999")) -- This will change the value from null to 999
val formatted_df2 = formatted_df1.withColumn("age", regexp_replace(col("age"), "NaN", "0")) -- This will change the value from NaN to 0
単純な UDF 関数を記述して結果を取得できます。
val scrubUdf = udf((value : String ) => {
value match {
case "NaN" => 0
case "null" => 999
case null => 999
case x if x.contains("-") => {
// (value.split("-")(0).toInt + value.split("-")(1).toInt) / 2
x.split("-").map(x=> x.toInt).sum / 2
}
case x if x.toInt >= 200 => 999
case _ => value.toInt
}
})
udf
として呼び出すことができます
df.withColumn("newAge", scrubUdf($"Age"))
お役に立てれば!
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加