【问题标题】:Collecting Parquet data from HDFS to local file system将 Parquet 数据从 HDFS 收集到本地文件系统
【发布时间】:2015-06-29 05:04:55
【问题描述】:

给定一个分布在 HDFS 上的 Parquet 数据集(元数据文件 + 可能 .parquet 部分),如何正确合并部分并将数据收集到本地文件系统中? dfs -getmerge ... 不起作用 - 它会将元数据与实际 parquet 文件合并..

【问题讨论】:

    标签: hadoop hdfs parquet


    【解决方案1】:

    有一种涉及 Apache Spark API 的方法 - 它提供了一种解决方案,但可能存在没有第三方工具的更有效的方法。

    spark> val parquetData = sqlContext.parquetFile("pathToMultipartParquetHDFS")       
    spark> parquet.repartition(1).saveAsParquetFile("pathToSinglePartParquetHDFS")
    
    bash> ../bin/hadoop dfs -get pathToSinglePartParquetHDFS localPath
    

    从 Spark 1.4 开始,最好使用 DataFrame::coalesce(1) 而不是 DataFrame::repartition(1)

    【讨论】:

      【解决方案2】:

      你可以用猪

      A = LOAD '/path/to parquet/files' USING parquet.pig.ParquetLoader as (x,y,z) ;
      STORE A INTO 'xyz path' USING PigStorage('|');
      

      你可以在上面创建 Impala 表,然后使用

      impala-shell -e "query" -o <output>
      

      同样的方式你也可以使用 Mapreduce

      【讨论】:

      • 谢谢。这是合法的,但我一直在寻找没有像 Pig、Spark 等 3rd 方工具的东西......
      【解决方案3】:

      您可以使用镶木地板工具 java -jar parquet-tools.jar merge source/ target/

      【讨论】:

        猜你喜欢
        • 2013-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-28
        • 1970-01-01
        • 2014-08-29
        • 1970-01-01
        相关资源
        最近更新 更多