Pyspark:获取两列之间不同组合的数量

时间:2019-12-01 21:37:09

标签: python sql pyspark rdd pyspark-sql

我需要能够在两个单独的列中获得不同组合的数量。

在此示例中,“动物”和“颜色”列中的结果是3,因为出现了三种不同的列组合。基本上,动物或颜色在不同的行之间可以相同,但是如果两行具有相同的动物和颜色,则应从此计数中将其忽略。

Animal | Color
Dog    | Brown
Dog    | White
Cat    | Black
Dog    | White

我知道您可以将数据添加到集合中,这样可以消除重复项,但是我似乎无法使其与多个变量一起使用。

这是我尝试解决此问题的示例代码。

d = d.rdd
d = d.map(lambda row: (row.day.year, row.number))
print(d.take(2000))
d_maxNum = d.reduceByKey(lambda max_num, this_num: this_num if this_num > max_num else max_num)
print(d_maxNum.collect())

2 个答案:

答案 0 :(得分:1)

Pyspark具有dropDuplicates方法refer,您可以使用。

df = sc.parallelize([Row(Animal='Dog', Color='White'), Row(Animal='Dog', Color='Black'), Row(Animal='Dog', Color='White'), Row(Animal='Cat', Color='White')]).toDF()

df.dropDuplicates(['Animal', 'Color']).count()

这将输出为3。

答案 1 :(得分:0)

您可以使用distinct功能。

##Perform distinct on entire dataframe.
df.distinct().show()

##Perform distinct on certain columns of dataframe
df.select('Animal','Color').distinct().show()