scala - 在 Spark scala 中合并

标签 scala apache-spark null coalesce

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

例如-我有以下 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|
+----+-----+-------------------+

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

最佳答案

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

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|
+----+-----+-------------------+

关于scala - 在 Spark scala 中合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64750557/

相关文章:

c# - 什么是NullReferenceException,如何解决?

mysql - 通过 sails-disk mysql 适配器或 Nodejs 应用程序中的 mysql 查询数据库字段中值为 'null' 的某些数据

java - 我怎样才能避免 java.lang.NullPointerException 错误

java - Slick 2.0.0-M3 表定义 - 对 tag 属性的说明

multithreading - 必须同步访问scala.collection.immutable.List和Vector吗?

java - eclipse 启动后获取 SIGSEGV

scala - 使用Spark访问数据框中的列

apache-spark - 从 Spark 写入时避免丢失分区数据的数据类型

apache-spark - Spark 减少功能 : understand how it works

hadoop - 无法为大型数据集运行 Spark 作业