Вы можете сделать groupBy
, а затем использовать функцию collect_set
или collect_list
в pyspark. Ниже приведен примерный фрейм данных вашего варианта использования (надеюсь, это то, на что вы ссылаетесь):
from pyspark import SparkContext
from pyspark.sql import HiveContext
sc = SparkContext("local")
sqlContext = HiveContext(sc)
df = sqlContext.createDataFrame([
("code1", "val1"),
("code1", "val2"),
("code1", "val3"),
("code2", "val1"),
("code2", "val2"),
], ["code", "val"])
df.show()
+-----+-----+
| code| val |
+-----+-----+
|code1|val1 |
|code1|val2 |
|code1|val3 |
|code2|val1 |
|code2|val2 |
+---+-------+
Теперь команда groupBy
и collect_list
:
(df
.groupby("code")
.agg(F.collect_list("val"))
.show())
Вывод:
+------+------------------+
|code |collect_list(val) |
+------+------------------+
|code1 |[val1, val2, val3]|
|code2 |[val1, val2] |
+------+------------------+
Здесь выше вы получаете список агрегированных значений во втором столбце