如何拆分数据框中的列并添加拆分值

时间:2017-07-06 05:54:16

标签: scala apache-spark dataframe apache-spark-sql

我有一个数据框,其列为#34; age"类型为String,我想以下面的形式更改值。

  • null至999
  • NaN为0
  • 年龄大于200至999
  • 范围(val1-val2)至(val1 + val 2)/ 2
  • 保持其他价值相同。

输入值,例如

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

1 个答案:

答案 0 :(得分:2)

您可以编写一个简单的UDF函数来获得结果

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="button" value="click" id="btn">

您可以将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

希望这有帮助!