Как я могу применить groupBy() только для создания групп из более чем X элементов в Pyspark?

Я пытаюсь применить предложение groupBy() к фрейму данных для группировки одинаковых экземпляров, но я хочу, чтобы оно применялось только в том случае, если могут быть созданы группы из более чем 3 элементов. Я имею в виду, что если у меня есть 2 одинаковых экземпляра, я не хочу их группировать, но если у меня более 2 одинаковых экземпляров, я хочу создать их группу.

Я использую этот код для создания групп, но я не знаю, как его изменить, чтобы решить проблему, с которой я столкнулся:

dataframe_grouped = dataframe.groupBy(columns)

person jartymcfly    schedule 15.06.2017    source источник


Ответы (2)


Датафрейм, например

>>> a = [("foo",3),("foo",11),("foo",22),("bar",3),("foo",5)]
>>> df = spark.createDataFrame(a,["name","value"])
>>> df.show()
+----+-----+
|name|value|
+----+-----+
| foo|    3|
| foo|   11|
| foo|   22|
| bar|    3|
| foo|    5|
+----+-----+

Примените фильтр по количеству вхождений после вашего groupBy()

>>> df2 = df.groupBy(df.name).count().filter("count>3").show()
>>> df2.show()
+----+-----+
|name|count|
+----+-----+
| foo|    4|
+----+-----+

Затем вы можете использовать элементы столбца «имя» df2 и соединить их с элементами столбца «имя» df1. Таким образом, df3 будет фреймом данных только с элементами, которые имеют одинаковые экземпляры выше 3.

>>> df3 = df.join(df2, df.name == df2.name).select(df2.name, df.value)
>>> df3.show()
+----+-----+
|name|value|
+----+-----+
| foo|    3|
| foo|   11|
| foo|   22|
| foo|    5|
+----+-----+

Если вы работаете с df3, вы можете использовать groupBy(), и у вас будет groupedData, в которой будет более 3 элементов для каждого «имени».

person titiro89    schedule 15.06.2017
comment
Отличный ответ! Благодарю вас! - person jartymcfly; 15.06.2017

Сделайте одну вещь, извлеките эти столбцы

 SeriesName = dataframe_grouped['column_name']

Теперь проверьте появление этой конкретной строки в этой серии. Найдите синтаксис из здесь

Из подсчета вы получите количество последовательностей и те, которые имеют более 2, поместите их в другую серию, а затем добавьте эту серию в фрейм данных.

dataframe_grouped['new_column'] = newSeries

а затем выполните группу по этому новому столбцуdataframe.groupBy(new_column)

person Ankan Roy    schedule 15.06.2017