【发布时间】:2018-01-23 06:21:48
【问题描述】:
我使用 Spark(当前版本 2.1.0)已经有一段时间了,但遇到了一些奇怪的行为。
假设您有两个数据框:
df_before = sparkSession.createDataFrame([('a', 4), ('b', 5)], ['A', 'B'])
df_after = sparkSession.createDataFrame([('a', 6), ('b', 7)], ['A', 'B'])
我们用一列描述它们的起源(或其他东西)来扩充它们。在这种情况下,只有一列表示之前或之后:
df_before = df_before.withColumn('C', lit('before'))
df_after = df_after.withColumn('C', lit('after'))
并将它们放在一个数据框中:
df_all = df_before.union(df_after)
这给了我们:
A | B | C
---|---|------
a | 4 | before
b | 5 | before
a | 6 | after
b | 7 | after
接下来我们也碰巧有不同的数据框:
data_other = [
('a', 'before', 10),
('b', 'before', 11),
('a', 'after', 12),
('b', 'after', 13)
]
df_other = sparkSession.createDataFrame(data_other, ['A', 'C', 'D'])
如果我然后直接加入两者:
df_all.join(df_other, ['A', 'C'])
我明白了:
A | C | B | D
---|--------|---|----
a | before | 4 | 10
b | before | 5 | 11
a | after | 6 | 10
b | after | 7 | 11
这与我的预期不同:
A | C | B | D
---|--------|---|----
a | before | 4 | 10
b | before | 5 | 11
a | after | 6 | 12
b | after | 7 | 13
有人可以解释这种行为吗?我做错了吗?
【问题讨论】:
标签: python apache-spark join pyspark spark-dataframe