首页 > 数据库 > mysql教程 > 如何在 Apache Spark 连接期间处理空值?

如何在 Apache Spark 连接期间处理空值?

Patricia Arquette
发布: 2025-01-01 10:33:12
原创
511 人浏览过

How to Handle Null Values During Apache Spark Joins?

如何在 Apache Spark 联接中包含空值

Apache Spark 在联接过程中默认不包含具有空值的行。当您想要保留所有数据(包括空值)时,这可能会导致问题。本文探讨了此问题的解决方案。

默认 Spark 行为

当您对两个 DataFrame 执行联接时,Spark 将排除具有 null 值的行。例如,考虑以下 DataFrame:

val numbersDf = Seq(
  ("123"),
  ("456"),
  (null),
  ("")
).toDF("numbers")

val lettersDf = Seq(
  ("123", "abc"),
  ("456", "def"),
  (null, "zzz"),
  ("", "hhh")
).toDF("numbers", "letters")
登录后复制

如果我们对这些 DataFrame 执行联接,我们将得到以下输出:

+-------+-------+
|numbers|letters|
+-------+-------+
|    123|    abc|
|    456|    def|
|       |    hhh|
+-------+-------+
登录后复制

如您所见,带有数字列中的 null 已从结果中排除。

解决方案

Spark 提供了一个特殊的用于处理空值连接的空安全相等运算符:

numbersDf
  .join(lettersDf, numbersDf("numbers") <=> lettersDf("numbers"))
  .drop(lettersDf("numbers"))
登录后复制

如果两个操作数都为空或相等,则此运算符将返回 true。使用此运算符,我们可以获得所需的输出:

+-------+-------+
|numbers|letters|
+-------+-------+
|    123|    abc|
|    456|    def|
|   null|    zzz|
|       |    hhh|
+-------+-------+
登录后复制

其他选项

Spark 2.3.0 :

  • PySpark: 使用Column.eqNullSafe
  • SparkR: 使用 %<=>%
  • SQL: 使用与
不同

早期 Spark版本:

在 Spark 1.6 之前,空安全连接需要笛卡尔积。

以上是如何在 Apache Spark 连接期间处理空值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板