【问题标题】:How to Split a Column in Data-frame and add the split values如何在数据框中拆分列并添加拆分值
【发布时间】:2019-01-14 01:00:32
【问题描述】:

我有一个字符串类型的列“年龄”的数据框,我想更改以下形式的值。

  • 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

【问题讨论】:

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


    【解决方案1】:

    你可以写一个简单的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"))
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      • 2021-04-27
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多