我想在 Apache Spark 连接中包含空值。 Spark 默认不包含 null 的行。
这是默认的 Spark 行为。
val numbersDf = Seq(
("123"),
("456"),
(null),
("")
).toDF("numbers")
val lettersDf = Seq(
("123", "abc"),
("456", "def"),
(null, "zzz"),
("", "hhh")
).toDF("numbers", "letters")
val joinedDf = numbersDf.join(lettersDf, Seq("numbers"))
这是 joinedDf.show()
的输出:
+-------+-------+
|numbers|letters|
+-------+-------+
| 123| abc|
| 456| def|
| | hhh|
+-------+-------+
这是我想要的输出:
+-------+-------+
|numbers|letters|
+-------+-------+
| 123| abc|
| 456| def|
| | hhh|
| null| zzz|
+-------+-------+
原文由 Powers 发布,翻译遵循 CC BY-SA 4.0 许可协议
Spark 提供了一个特殊的
NULL
安全相等运算符:注意不要将它与 Spark 1.5 或更早版本一起使用。在 Spark 1.6 之前,它需要笛卡尔积( SPARK-11111 - _快速空安全连接_)。
在 Spark 2.3.0 或更高版本中,您可以在 PySpark 中使用
Column.eqNullSafe
:和
%<=>%
在 SparkR :使用 SQL ( Spark 2.2.0+ ),您可以使用
IS NOT DISTINCT FROM
:这也可以与
DataFrame
API 一起使用: