【问题标题】:Which parts of a parquet file name matter?parquet 文件名的哪些部分很重要?
【发布时间】:2019-05-05 15:26:32
【问题描述】:

我在类似col1=1/col2=2/col3=3/part-00000-33b48309-0442-4e86-870f-f3070268107f-c000.snappy.parquet 的结构中有一堆镶木地板数据

我已经阅读了我能找到的内容,并且文件名的每个部分的含义似乎很清楚 - part-00000 分区中每个文件递增,c000 与输出的其他部分有关配置,其余为 UUID,以防止并行写入时发生冲突。

我想知道 - 我可以更改或删除文件名的哪些部分?具体来说,只删除 UUID 是否安全?

(更大的动机是我需要随着时间的推移将数据添加到现有存储中,但希望每个分区维护 N 个文件,并且由于您无法覆盖正在读取的文件,因此我需要暂存新的文件,然后将它们复制过来,使用已知文件名会更容易)

【问题讨论】:

    标签: apache-spark parquet


    【解决方案1】:

    也许你可以应用解决方案 Spark parquet partitioning : Large number of files

    data
      .repartition($"key",floor($"row_number"/N)*N)
      .write.partitionBy("key")
      .parquet("/location")
    

    【讨论】:

    • 那不行。我有AB,我需要将它们合并在一起,然后替换A
    • 您可以将 A 和 B 作为不同的数据帧加载,将它们连接起来,最后使用 coalesce 写入 A 位置
    • 我试过了。 spark.read.parquet(a, b).coalesce(1).write.parquet(a),对吧?我会再试一次,但我记得出错了。
    • 是的,不能就地做事。必须有第三个位置用作交换。
    • 有道理,因为 Spark 在执行操作(在本例中为 write())之前不会开始实际执行 read(),而且我认为它不会想要覆盖相同的位置正在同时阅读
    猜你喜欢
    • 2021-10-18
    • 2014-06-29
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多