【发布时间】:2017-08-03 09:44:08
【问题描述】:
我需要通过 Spark 对我加载为两列 Pandas 数据框的大型数据集进行分组,然后重新转换为 Pandas:基本上是在执行 Pandas -> 'pyspark.sql.group.GroupedData' -> Pandas。 两列元素均为整数,分组后的数据需要以列表形式存储,如下:
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 这样的东西(之后我需要做其他对 Pandas 更友好的操作):
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,我肯定会更快。
有什么提示吗? 谢谢!
【问题讨论】:
-
你查了吗
pyspark.sql.DataFrame.toPandasspark.apache.org/docs/2.1.0/api/python/… -
@ MedAli 我检查了它,如果对象是 pyspark.sql.DataFrame,我可以使用它;从 groupby() 产生的一个是 pyspark.sql.group.GroupedData 类型
-
您可以将分组前的数据帧转换为熊猫,然后在熊猫中执行分组。
-
作为一般原则:当您的数据适合主内存时,Spark 将始终比 pandas(或任何其他“非大数据”框架)慢跨度>
-
@csbr 您需要接受解决您问题的答案!
标签: python pandas pyspark apache-spark-sql spark-dataframe