我想在Apache Spark连接中包含空值。Spark默认不包含空的行。
下面是默认的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|
+-------+-------+
基于K L的想法,可以使用foldLeft生成联接列表达式:
然后,可以调用此函数,如下所示:
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一起使用:相关问题 更多 >
编程相关推荐