将Parquet数据从hdfs收集到本地文件系统

de90aj5v  于 2021-05-30  发布在  Hadoop
关注(0)|答案(3)|浏览(354)

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

zvms9eto

zvms9eto1#

你可以用Pig

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

mxg2im7a

mxg2im7a2#

你可以用Parquet工具 java -jar parquet-tools.jar merge source/ target/

vom3gejh

vom3gejh3#

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

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)

相关问题