spark如何合并几个列上的两个数据框?

我有两个数据框

  • a列:['q1','q2','q3','a1','a2']
  • b列:['q1','q2','q3','b','b2']

a可能不包含b中的某些['q1','q2','q3'],b也可能不包含a中的某些['q1','q2','q3']。

合并是指,如果a与b具有相同的['q1','q2','q3'],则合并各行,然后合并左行。 full outer join不会这样做。

我的伪代码就像:

c = a.join(b,on= ['q1','q2','q3'],how='inner')
c = c.union(a.filter( ~a.withColumn('xxx',F.concat_ws('|','q1','q3') ).isin(c.select(F.concat_ws('|','q3')) )
c = c.union(b.filter( ~b.withColumn('xxx','q3')) )

但这是非常无效的。

还有什么更好的方法吗?

yingchenlu 回答:spark如何合并几个列上的两个数据框?

我忘了解决这个问题。

实际上full outer join是正确的方法。 但是spark中有一个相关的错误,标记为在2.1版中已解决,但我在2.4.0中遇到了。

在完全外部联接之前内部联接的意外结果:

df1 = spark.parquet.read(...)
df2 = spark.parquet.read(...)
df3 = spark.parquet.read(...)
df4 = spark.parquet.read(...)
df5 = spark.parquet.read(...)

store_product =  spark.parquet.read(...)

df1 = df1.join(store_product,on=['store_id','product_id'],how='inner')

dfs = [df1,df2,df3,df4,df5,]

df = full_outer_join_all(dfs)

将内部连接移到完全外部正确的后面:

df1 = spark.parquet.read(...)
df2 = spark.parquet.read(...)
df3 = spark.parquet.read(...)
df4 = spark.parquet.read(...)
df5 = spark.parquet.read(...)

store_product =  spark.parquet.read(...)


dfs = [df1,]

df = full_outer_join_all(dfs)

df = df.join(store_product,how='inner')

PS:这并非在所有数据集中都发生,我创建了一些数据进行测试,但无法复制。

,

我假设您希望通过以下方式实现left-outer连接:

df1.join(df2,on=['q1','q2','q3'],"left_outer")

enter image description here

本文链接:https://www.f2er.com/3125500.html

大家都在问