给定一个分布在hdfs上的Parquet数据集(元数据文件+may) .parquet 如何正确地合并部件并将数据收集到本地文件系统中? dfs -getmerge ... 不起作用-它将元数据与实际Parquet文件合并。。
.parquet
dfs -getmerge ...
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
mxg2im7a2#
你可以用Parquet工具 java -jar parquet-tools.jar merge source/ target/
java -jar parquet-tools.jar merge source/ target/
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)
DataFrame::coalesce(1)
DataFrame::repartition(1)
3条答案
按热度按时间zvms9eto1#
你可以用Pig
您可以在上面创建impala表,然后使用
同样的方法也可以使用mapreduce
mxg2im7a2#
你可以用Parquet工具
java -jar parquet-tools.jar merge source/ target/
vom3gejh3#
有一种方法涉及到ApacheSparkAPI,它提供了一种解决方案,但是可能存在没有第三方工具的更有效的方法。
因为spark 1.4更好用
DataFrame::coalesce(1)
而不是DataFrame::repartition(1)