在 pyspark 中高效 GroupBy/CombineBy

Efficient GroupBy/CombineBy in pyspark

目前我正在使用 Spark(pyspark 与 Spark 版本 1.6)并且我有一个 DataFrame 如下:

DataFrame[clientId: bigint, clientName: string, action: string, ...]

我想将其转储到 S3 中,按以下格式按属性(例如 clientId)分隔 s3://path/<clientId>/<datafiles>.

我希望 datafiles 以 json 格式包含相应 clientId 的行,因此对于路径 s3://path/1/,数据文件将包含:

{"clientId":1, "clientName":"John Doe", "action":"foo", ...}
{"clientId":1, "clientName":"John Doe", "action":"bar", ...}
{"clientId":1, "clientName":"John Doe", "action":"baz", ...}

我正在考虑使用 groupBy 然后 toJSON 但是在 DataFrame 中你只能收集数据并且 DataFrame 太大而不适合驱动程序(也是 I/O是巨大的)。如何从执行者那里保存小组的部分结果?

只需 partitionBy 并写信给 JSON:

df.write.partitionBy("clientName").json(output_path)

你会得到结构

s3://path/clientId=some_id/<datafiles>