【问题标题】:Saving in parquet format from multiple spark workers从多个火花工人以镶木地板格式保存
【发布时间】:2015-10-01 21:56:57
【问题描述】:

我有一份工作需要以 parquet/avro 格式保存所有工作节点的结果。我可以为每个单独的分区创建一个单独的 parquet 文件并将所有生成的文件作为一个表读取吗?或者有没有更好的方法来解决这个问题? 输入分为 96 个分区,结果需要保存在 HDFS 上。当我尝试将其保存为文件时,它创建了超过一百万个小文件。

【问题讨论】:

    标签: apache-spark hadoop-yarn parquet


    【解决方案1】:

    您可以在调用write 之前对所需数量的分区执行repartition(或coalesce,如果您总是想要更少的分区)。然后,您的数据将被写入相同数量的文件中。当您想读入数据时,您只需指向包含文件的文件夹而不是特定文件。像这样:

    sqlContext.read.parquet("s3://my-bucket/path/to/files/")  
    

    【讨论】:

    • 它不在 RDD 中。需要从 JAVA 本身中保存。
    • 因为它是一个映射的 RDD 重新分区删除了很多数据。因此,现在我们将 RDD 转换为 Dataframe,然后将其合并为 3。
    • 嗯...首先,映射的 RDD 仍然是 RDD。其次,调用repartition 不会删除任何数据,它只会将数据随机排列到所需数量的分区中。第三,您确实可以使用coalesce 而不是repartition(我已经用这个更新了我的答案)。
    猜你喜欢
    • 2017-03-17
    • 2020-01-10
    • 2018-12-20
    • 2016-01-18
    • 2020-02-25
    • 2019-05-26
    • 2019-02-19
    • 2021-07-28
    • 2021-06-13
    相关资源
    最近更新 更多