【问题标题】:Coalesce in spark scala在 Spark Scala 中合并
【发布时间】:2021-02-21 07:24:09
【问题描述】:

我试图了解 Spark - scala 中是否有默认方法可以在合并中包含空字符串。

Ex- 我有下面的 DF -

 val df2=Seq(
 ("","1"),
 ("null","15_20")
 )toDF("c1","c2")

+----+-----+
|  c1|   c2|
+----+-----+
|    |    1|
|null|15_20|
+----+-----+

以下代码仅适用于 NULL 值。但我也需要合并来处理空字符串。

df2.withColumn("FirstNonNullOrBlank",coalesce(col("c1"),col("c2")))show
+----+-----+-------------------+
|  c1|   c2|FirstNonNullOrBlank|
+----+-----+-------------------+
|    |    1|                   |
|null|15_20|              15_20|
+----+-----+-------------------+

预期输出 -

+----+-----+-------------------+
|  c1|   c2|FirstNonNullOrBlank|
+----+-----+-------------------+
|    |    1|              1    |
|null|15_20|              15_20|
+----+-----+-------------------+

这里最好的方法应该是什么?

【问题讨论】:

    标签: scala apache-spark null coalesce


    【解决方案1】:

    您需要一个辅助函数来“取消”这些记录:

    def nullify(c: Column) = when(not (c==="" or c==="null"),c)
    
    df2
      .withColumn("FirstNonNullOrBlank", coalesce(
        nullify(col("c1")),
        nullify(col("c2")))
      )
      .show
    
    +----+-----+-------------------+
    |  c1|   c2|FirstNonNullOrBlank|
    +----+-----+-------------------+
    |    |    1|                  1|
    |null|15_20|              15_20|
    +----+-----+-------------------+
    

    【讨论】:

      猜你喜欢
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 2018-07-06
      • 1970-01-01
      • 2019-10-14
      相关资源
      最近更新 更多