python - Pyspark SparkSQL : issue with outer join

标签 python apache-spark apache-spark-sql pyspark

我正在使用 pyspark,但我遇到了外部连接的问题。基本上,如果我使用列名列表作为“ON”条件,则连接的结果是内部连接,无论我是否指定“outer_left”选项。如果我指定完全相等(即 df1.id == df2.id)而不是列名列表,问题就会消失。

换句话说:

testDf = sc.parallelize([['a', 1], ['b', 1]]).toDF(['id', 'val1'])
testDf2 = sc.parallelize([['a', 2]]).toDF(['id', 'val2'])
cond = [testDf.id == testDf2.id]
testDf.join(testDf2, cond, how='left_outer').collect()

将返回右左外连接:

[Row(id=u'a', val1=1, id=u'a', val2=2),Row(id=u'b', val1=1, id=None, val2=None)]

但如果我使用

testDf.join(testDf2, 'id', how='left_outer').collect()

它将返回一个内部连接

[Row(id=u'a', val1=1, val2=2)]

你能帮我理解为什么吗? 非常感谢!

最佳答案

正如官方所说documentation :

If on is a string or a list of string indicating the name of the join column(s),

the column(s) must exist on both sides, and this performs an inner equi-join.

关于python - Pyspark SparkSQL : issue with outer join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33905902/

相关文章:

scala - 在 Spark 2+ 中通过 SparkSession 向 Kryo 注册类

apache-spark - 如何在spark作业中使用HiveContext添加jar

scala - RDD 到 LabeledPoint 的转换

scala - 退出状态:-100。诊断:容器在“丢失”节点上释放

python - 在 C 中嵌入 matplotlib

python - 获取基类的名称?

python - Matplotlib 支持 Qt5 吗?

python - 为什么 Python 类方法装饰器不接收该方法作为绑定(bind)方法?

scala - Apache-Spark 内部作业调度

java - 如何使用javapairrdd中的containsAll和contains来使用过滤器