为什么在联合之前选择distinct返回的列比在联合之后返回的列多



我使用Pyspark,我有4个数据帧,每个数据帧都有相同的模式。我想数一下它们中不同的id。

但如果我这样做:

combined_df1 = (df1.select('id')) 
.union(df2.select('id')) 
.union(df3.select('id')) 
.union(df4.select('id'))
combined_df1.select('id').distinct().count()

我得到的数字比我得到的要高:

combined_df2 = df1 
.union(df2) 
.union(df3) 
.union(df4)
combined_df2.select('id').distinct().count()

返回的行增加了约10%,这不是一个微不足道的数字。这是怎么回事?

为什么在并集之前还是之后选择不同的id很重要?不管怎样,它都是id的相同列表,不是吗?

很难确定,但我的猜测是,每个数据帧中的列/模式的顺序不同。CCD_ 3将您的数据帧合并为一个大数据帧;统一的";以及下一个数据帧的另一列。因此;失败";因为它试图对不适当的值进行重复数据消除。

解决方案是用unionByName代替union


准确回答您的问题:

为什么在并集之前或之后选择不同的id很重要?

TL;DR==>联合不会区分价值观。

让我们举一个简单的例子,有两个数据帧:

df1:

id
2
2
3

最新更新