将pyspark groupedData转换为pandas DataFrame

时间:2017-08-03 09:44:08

标签: python pandas pyspark apache-spark-sql spark-dataframe

我需要通过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我肯定会更快。

任何提示? 谢谢!

1 个答案:

答案 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]