【问题标题】:How to combine two columns of dataset in spark如何在火花中组合两列数据集
【发布时间】:2018-08-17 03:56:44
【问题描述】:

我有一个这样的火花数据集:

> df.show()
+------+------+
| No1  | No2  |
+------+------+
| 001  | null |
| 002  | 002  |
| 003  | 004  |
| null | 005  |
+------+------+

我想获得一个新列 No3,其中包含列 No1No2 中的值,条件是复制 No1 如果它有值,否则如果它为空,则使用 No2

中的值
+------+------+------+
| No1  | No2  | No3  |
+------+------+------+
| 001  | null | 001  |
| 002  | 002  | 002  |
| 003  | 004  | 003  |
| null | 005  | 005  |
+------+------+------+

我该怎么做?

【问题讨论】:

    标签: apache-spark apache-spark-dataset


    【解决方案1】:

    我认为您正在寻找的是 coalesce

    import org.apache.spark.sql.functions._
    
    val data = spark.sparkContext.parallelize(Seq(
      ("001", null),
      ("002", "002"),
      ("003", "004"),
      (null, "005")
    )).toDF("No1", "No2")
    
    val resultDf = data.withColumn("No3", coalesce($"No1", $"No2"))
    
    resultDf.show
    

    【讨论】:

      【解决方案2】:

      您可以检查No1 列是否为null。如果是null,则取No2 的值

      import org.apache.spark.sql.functions._
      
      val data = spark.sparkContext.parallelize(Seq(
        ("001", null),
        ("002", "002"),
        ("003", "004"),
        (null, "005")
      )).toDF("No1", "No2")
      
      val resultDf = data.withColumn("No3", when($"No1".isNull, $"No2").otherwise($"No1"))
      
      resultDf.show
      

      输出:

      +----+----+---+
      |No1 |No2 |No3|
      +----+----+---+
      |001 |null|001|
      |002 |002 |002|
      |003 |004 |003|
      |null|005 |005|
      +----+----+---+
      

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多