PySpark groupBy с сгруппированными элементами - PullRequest
0 голосов
/ 02 февраля 2020

У меня около 2 миллиардов записей, и я хочу сгруппировать данные с PySpark и сохранить все сгруппированные данные в csv.

Вот мой пример Dataframe:

+----+------+---------------------+
| id | name | date                |
+----+------+---------------------+
| 1  | a    | 2019-12-01 00:00:00 |
+----+------+---------------------+
| 2  | b    | 2019-12-01 00:00:00 |
+----+------+---------------------+
| 3  | c    | 2020-01-01 00:00:00 |
+----+------+---------------------+
| 4  | a    | 2020-01-01 00:00:00 |
+----+------+---------------------+
| 5  | b    | 2020-01-01 00:00:00 |
+----+------+---------------------+
| 6  | a    | 2020-01-05 00:00:00 |
+----+------+---------------------+
| 7  | b    | 2020-01-05 00:00:00 |
+----+------+---------------------+

Затем я использую groupBy сгруппировать их с помощью этого кода:

df.groupBy([
  'name',
  year('date').alias('year'),
  month('date').alias('month')
]).count()

output:

+------+------+-------+-------+
| name | year | month | count |
+------+------+-------+-------+
| a    | 2019 | 12    | 1     |
+------+------+-------+-------+
| b    | 2019 | 12    | 1     |
+------+------+-------+-------+
| c    | 2020 | 01    | 1     |
+------+------+-------+-------+
| a    | 2020 | 01    | 2     |
+------+------+-------+-------+
| b    | 2020 | 01    | 2     |
+------+------+-------+-------+

Но я хочу, чтобы элементы каждой группы в Dataframe были такими:

+------+------+-------+-----------+
| name | year | month | element   |
+------+------+-------+-----------+
| a    | 2019 | 12    | Dataframe |
+------+------+-------+-----------+
| b    | 2019 | 12    | Dataframe |
+------+------+-------+-----------+
| c    | 2020 | 01    | Dataframe |
+------+------+-------+-----------+
| a    | 2020 | 01    | Dataframe |
+------+------+-------+-----------+
| b    | 2020 | 01    | Dataframe |
+------+------+-------+-----------+

Where "element столбец "содержит сгруппированный Dataframe в каждой группе, затем я хочу отобразить каждую группу и сохранить их в отдельном csv.

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

Как это сделать в PySpark?

1 Ответ

0 голосов
/ 03 февраля 2020

Вы можете достичь своей цели, используя withcolumn и lit

df.groupBy(['name',year('date').alias('year'),month('date').alias('month')])
.withColumn('element',lit('Dataframe'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...