【问题标题】:Combine multiple raw files into single parquet file将多个原始文件合并为单个镶木地板文件
【发布时间】:2018-04-19 05:15:19
【问题描述】:

我在 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 大小。 Number 大致对应于我拥有的原始文件的数量。

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

我如何做到这一点?

【问题讨论】:

    标签: apache-spark pyspark etl aws-glue


    【解决方案1】:

    您只需设置repartition(1),它将所有分区中的数据洗牌到单个分区,该分区将在写入时生成单个输出文件。

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

    【讨论】:

    • 谢谢!经过一番阅读,我认为 coalesce 可能更合适。有什么想法吗?
    • coalesce(1) 和 repartition(1) 在功能上是相同的,因为整个数据必须在一个分区中传输,必须有一个随机播放,并且对于两个操作来说都是相同的,
    • 我知道这是一个旧线程.. 但是对于任何路人来说......虽然看起来功能相同,但我反复发现 coalesce(1) 在大规模数据上表现不佳,并且如果我真的需要一个文件,请使用 repartition(1)。
    • @Renée 那是因为重新分区将强制另一个 shuffle(因此阶段)改变并行度(进入额外添加阶段的分区数)。另一方面,coalesce 改变了上游的并行度(进入当前阶段的分区数);因此,包含合并的阶段中的任何数据转换都会降低并行度。重新分区和合并之间哪个更快取决于正在执行的数据和处理步骤(即来自重新分区的额外洗牌可能是瓶颈)。 Sahil 的评论不正确。
    • 我认为 repartition(1) 不会满足create a single file per partition 的要求。 repartition(1) 将创建 1 个分区,而不是每个分区一个文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 2019-01-12
    • 2018-05-14
    相关资源
    最近更新 更多