mar*_*oss 14 apache-spark parquet
我有一个非常沉重的拼花文件,我需要更改其中一个列的值.一种方法是更新源文本文件中的这些值并重新创建镶木地板文件,但我想知道是否有更便宜,更简单的解决方案.
小智 7
有一些解决方法,但您需要以某种方式创建镶木地板文件以使其更易于更新。
最佳实践:
A. 使用行组创建镶木地板文件。在数据压缩和字典编码等功能停止发挥作用之前,您需要优化可以进入行组的数据行数。
B. 一次扫描一个行组,找出哪些行组需要更新。为每个修改的行组生成带有修改数据的新镶木地板文件。一次处理一个行组的数据,而不是文件中的所有数据,内存效率更高。
C. 通过附加未修改的行组和通过读取每个行组的一个 Parquet 文件生成的修改的行组来重建原始 Parquet 文件。
使用行组重新组装镶木地板文件的速度非常快。
从理论上讲,如果您只是删除页脚(统计信息),附加新行组并添加带有更新统计信息的新页脚,那么应该很容易附加到现有的镶木地板文件中,但是没有支持它的 API/库。
让我们从基础开始:
Parquet是一种文件格式,需要保存在文件系统中。
关键问题:
append作业?append文件? append操作吗?答案:
parquet.hadoop.ParquetFileWriter仅支持CREATE和OVERWRITE; 没有append模式。(不确定,但是在其他实现中这可能会改变-实木复合地板设计确实支持append)
HDFS允许append使用该dfs.support.append属性处理文件
Spark框架不支持append现有的镶木地板文件,并且没有计划;看到这个JIRA
在分布式系统中附加到现有文件不是一个好主意,特别是考虑到我们可能同时有两个编写者。
更多详细信息在这里:
http://bytepadding.com/big-data/spark/read-write-parquet-files-using-spark/
http://bytepadding.com/linux/understanding-basics-of-filesystem/