在s3://my-bucket/events/date=X/
我有一个存储在多个零件文件中的镶木地板数据集:
part000.snappy.parquet
part001.snappy.parquet
part002.snappy.parquet
数据集中的事件有一个timestamp
列,即 ISO 8601 中的字符串。数据集中的事件是完全未排序的。
使用 spark,我想对数据集进行排序并将其存储回 S3,这样:
partXXX.snappy.parquet
,事件按时间戳排序详细信息: - 每个部分文件有 200MB - 1GB - 最终保存的文件可以包含任意数量的事件,只要我能以某种方式控制它们的大小。我想保留小于 1GB 的部分文件。
在 Spark 中这样做容易吗?如何实现这一点?/
以下工作:
target_path = "s3://..."
events = spark.read.parquet("s3://my-bucket/events/date=X/")
events = events.sort("timestamp", ascending=True)
num_files = ceil(float(events.count()) / EVENTS_PER_FILE)
events.coalesce(num_files).write.parquet(
target_path,
mode="overwrite") # note: overwrite deletes old files
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句