I have n(large)
我想要合并的小尺寸 orc 文件的数量k(small)
大型 orc 文件的数量。
这是使用完成的alter table table_name concatenate
Hive 中的命令。
我想了解 Hive 是如何实现这一点的。
我希望使用 Spark 来实现此功能,并根据需要进行任何更改。
任何指点都会很棒。
根据更改表/分区连接 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterTable/PartitionConcatenate:
如果表或分区包含许多小的 RCFiles 或 ORC 文件,那么上面的命令会将它们合并成更大的文件。对于 RCFile,合并发生在块级别,而对于 ORC 文件,合并发生在条带级别,从而避免了解压缩和解码数据的开销。
Also 兽人条纹 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC#LanguageManualORC-Stripes:
ORC 文件的主体由一系列条纹组成。条纹是
大(通常~200MB)并且彼此独立,并且通常
由不同的任务处理。柱状的定义特征
存储格式是每一列的数据单独存储
并且从文件中读取的数据应该与
读取的列数。
在ORC文件中,每一列都存储在多个流中,这些流存储在
文件中彼此相邻。例如,整数列是
表示为两个流 PRESENT,其中使用一个流,每个流一位
value 记录该值是否为非空,DATA 记录该值
非空值。如果条带中所有列的值都不为空,
条带中省略了 PRESENT 流。对于二进制数据,ORC
使用三个流 PRESENT、DATA 和 LENGTH,存储长度
每个值。每种类型的详细信息将在
以下小节。
要在 Spark 中实现,您可以使用SparkSQL http://spark.apache.org/docs/latest/sql-programming-guide.html#sql在 Spark Context 的帮助下:
scala> val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
scala> sqlContext.sql("Your_hive_query_here")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)