从 HDFS 收集 Parquet 数据到本地文件系统
Collecting Parquet data from HDFS to local file system
给定一个分布在 HDFS 上的 Parquet 数据集(元数据文件 + 可能 .parquet
部分),如何正确合并部分并将数据收集到本地文件系统? dfs -getmerge ...
不起作用 - 它将元数据与实际镶木地板文件合并..
有一种涉及 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)
你可以用猪
A = LOAD '/path/to parquet/files' USING parquet.pig.ParquetLoader as (x,y,z) ;
STORE A INTO 'xyz path' USING PigStorage('|');
您可以在上面创建 Impala table,然后使用
impala-shell -e "query" -o <output>
您也可以使用 Mapreduce 的相同方式
您可以使用镶木地板工具
java -jar parquet-tools.jar merge source/ target/
给定一个分布在 HDFS 上的 Parquet 数据集(元数据文件 + 可能 .parquet
部分),如何正确合并部分并将数据收集到本地文件系统? dfs -getmerge ...
不起作用 - 它将元数据与实际镶木地板文件合并..
有一种涉及 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)
你可以用猪
A = LOAD '/path/to parquet/files' USING parquet.pig.ParquetLoader as (x,y,z) ;
STORE A INTO 'xyz path' USING PigStorage('|');
您可以在上面创建 Impala table,然后使用
impala-shell -e "query" -o <output>
您也可以使用 Mapreduce 的相同方式
您可以使用镶木地板工具
java -jar parquet-tools.jar merge source/ target/