我需要通过Spark分组一个大型数据集,我将其作为两列Pandas数据帧加载,然后重新转换为Pandas:基本上做Pandas - > 'pyspark.sql.group.GroupedData' - >大熊猫。 两列中的元素都是整数,分组数据需要以列表格式存储,如下所示:
df.a df.b
1 3
2 5
3 8
1 2
3 1
2 6
...
spark_df = spark.createDataFrame(df)
spark_grouped_df = spark_df.groupBy('a')
type: <class 'pyspark.sql.group.GroupedData'>
此时,我需要有像Pandas df这样的东西(之后我需要做更多熊猫友好的其他操作):
a b
1 | [3,2]
2 | [5,6]
3 | [8,1]
...
如果使用pandas,我会这样做,但是太耗时了:
grouped_data = pd.DataFrame(df.groupby('a',as_index = True, sort = True)['b'].apply(list))
使用Spark我肯定会更快。
任何提示? 谢谢!
答案 0 :(得分:2)
您需要聚合分组数据。要获得输出格式,可以使用collect_list函数
>>> from pyspark.sql.functions import collect_list
>>> pdf = spark_df.groupby('a').agg(collect_list('b').alias('b')).toPandas()
>>> pdf.head()
a b
0 1 [3, 2]
1 3 [8, 1]
2 2 [5, 6]