【发布时间】:2016-03-02 17:06:31
【问题描述】:
在 PySpark 中,我想使用键值对对两个 RDD 进行完全外部连接,其中键可能是 None。
例如:
rdd1 = sc.parallelize([(None, "a"), (None, "b")])
rdd2 = sc.parallelize([(None, "c"), (None, "d")])
join_rdd = rdd1.join(rdd2)
看起来 PySpark 加入了键为 None 的记录:
print(rdd1.join(rdd2).take(10))
>>> [(None, ('a', 'c')), (None, ('a', 'd')), (None, ('b', 'c')), (None, ('b', 'd'))]
但是,在 SQL 中,当我连接两个表时:
Table1: Table2:
key val key val
NULL a NULL c
NULL b NULL d
SELECT * FROM Table1 JOIN Table2 ON Table1.key = Table2.key
我有一个空的结果集。
我想这是因为在 Python 中None == None 为真,而在 SQL 中NULL = NULL 为假。
我有两个问题:
有没有办法模拟 SQL 行为并强制 PySpark 不通过 Nones 加入?
是错误还是功能?作为 SQL 用户,我期望通过空键加入不会返回任何内容。我是 PySpark 的新手,在有关 joinig Nones 的文档中一无所获。也许值得在 Spark 编程指南中做一些说明?
还是我哪里错了?
谢谢!
【问题讨论】:
标签: python join apache-spark null pyspark