Pyspark: получить количество различных комбинаций между двумя столбцами. - PullRequest
0 голосов
/ 02 декабря 2019

Мне нужно иметь возможность получить количество различных комбинаций в двух отдельных столбцах.

В этом примере из столбцов "Животное" и "Цвет" результат, который я хочу получить, равен 3, посколькупроисходят три различные комбинации столбцов. По сути, Animal или Color могут быть одинаковыми в отдельных строках, но если две строки имеют одинаковое Animal и Color, его следует исключить из этого подсчета.

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 ]

1 голос
/ 02 декабря 2019

Pyspark имеет dropDuplicates метод , относящийся к , который вы можете использовать.

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.

0 голосов
/ 02 декабря 2019

Вы можете использовать функцию distinct.

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

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