在 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>
目前我正在使用 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>