gpt4 book ai didi

apache-spark - 将多个原始文件合并为单个 Parquet 文件

转载 作者:行者123 更新时间:2023-12-04 04:54:30 27 4
gpt4 key购买 nike

我在 S3 中有大量由 yyyy/mm/dd/hh 分区的事件。
每个分区有大约 80.000 个原始文本文件。
每个原始文件都有大约 1.000 个 JSON 格式的事件。

当我运行脚本进行转换时:

datasource0 = glueContext.create_dynamic_frame.from_catalog(database=from_database,
table_name=from_table,
transformation_ctx="datasource0")
map0 = Map.apply(frame=datasource0, f=extract_data)
applymapping1 = ApplyMapping.apply(......)
applymapping1.toDF().write.mode('append').parquet(output_bucket, partitionBy=['year', 'month', 'day', 'hour'])

我最终得到了大量跨分区的小文件,名称如下:
part-00000-a5aa817d-482c-47d0-b804-81d793d3ac88.snappy.parquet
part-00001-a5aa817d-482c-47d0-b804-81d793d3ac88.snappy.parquet
part-00002-a5aa817d-482c-47d0-b804-81d793d3ac88.snappy.parquet

它们每个的大小为 1-3KB。数字大致对应于我拥有的原始文件的数量。

我的印象是 Glue 将从目录中获取所有事件,按照我想要的方式对它们进行分区并存储 在单个文件中 每个分区。

我如何做到这一点?

最佳答案

您只需要设置 repartition(1)这会将数据从所有分区混洗到单个分区,这将在写入时生成单个输出文件。

applymapping1.toDF()
.repartition(1)
.write
.mode('append')
.parquet(output_bucket, partitionBy=['year', 'month', 'day', 'hour'])

关于apache-spark - 将多个原始文件合并为单个 Parquet 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47147159/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com