【发布时间】:2015-11-24 23:35:10
【问题描述】:
我正在使用 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)]
你能帮我理解为什么吗? 非常感谢!
【问题讨论】:
标签: python apache-spark apache-spark-sql pyspark