我正在具有数百万条记录的数据集上运行groupBy(),并希望保存结果输出(PySpark GroupedData对象),以便稍后可以对它进行反序列化并从该点恢复(在根据需要)。

df.groupBy("geo_city")
<pyspark.sql.group.GroupedData at 0x10503c5d0>


我想避免将GroupedData对象转换为DataFrames或RDD,以便将其保存为文本文件或Parquet / Avro格式(因为转换操作很昂贵)。还有其他有效的方法可以将GroupedData对象存储为某种二进制格式,以便更快地进行读取/写入吗?可能相当于Spark中的泡菜?

最佳答案

没有任何东西是因为GroupedData不是真的。它根本不对数据执行任何操作。它仅描述对后续agg的结果执行操作时应如何进行实际聚合。

您可能会序列化底层JVM对象并在以后还原它,但这是浪费时间。由于groupBy仅描述必须执行的操作,因此可以忽略从头重新创建GroupedData对象的成本。

10-08 12:07