附加到ORC文件

问题描述 投票:2回答:3

我是大数据和相关技术的新手,所以我不确定我们是否可以将数据附加到现有的ORC文件中。我正在使用Java API编写ORC文件,当我关闭Writer时,我无法再次打开文件来向其写入新内容,基本上是为了追加新数据。

有没有办法可以使用Java Api或Hive或任何其他方法将数据附加到现有的ORC文件?

还有一点澄清,当将Java util.Date对象保存到ORC文件中时,ORC类型存储为:

struct<timestamp:struct<fasttime:bigint,cdate:struct<cachedyear:int,cachedfixeddatejan1:bigint,cachedfixeddatenextjan1:bigint>>,

对于java BigDecimal,它是:

<margin:struct<intval:struct<signum:int,mag:struct<>,bitcount:int,bitlength:int,lowestsetbit:int,firstnonzerointnum:int>

这些是正确的,有没有这方面的信息?

hadoop hive orc
3个回答
2
投票

不,您不能直接附加到ORC文件。也不是Parquet文件。也没有任何具有复杂内部结构的列式格式,其中元数据与数据交错。

引用官方的“Apache Parquet”网站......

在数据之后写入元数据以允许单遍写入。

然后引用官方的“Apache ORC”网站......

由于HDFS不支持在写入文件后更改文件中的数据,因此ORC将顶级索引存储在文件的末尾(...)文件的尾部由3部分组成;文件元数据,文件页脚和postscript。

嗯,从技术上讲,现在你可以附加到HDFS文件;你甚至可以截断它。但是这些技巧仅对某些边缘情况有用(例如,Flume将消息馈送到HDFS“日志文件”,微批量,不时使用fflush)。

对于Hive事务支持,他们使用不同的技巧:在每个事务(即微批处理)上创建一个新的ORC文件,并在后台运行定期压缩作业,即HBase。


2
投票

是的,这可以通过Hive实现,您可以在其中基本上“连接”更新的数据。从蜂巢官方文档https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions#HiveTransactions-WhatisACIDandwhyshouldyouuseit


2
投票

2017年更新

是的,你现在可以! Hive为ACID提供了新的支持,但您可以使用附加模式mode("append")Spark将数据附加到您的表中

下面是一个例子

Seq((10, 20)).toDF("a", "b").write.mode("overwrite").saveAsTable("tab1")
Seq((20, 30)).toDF("a", "b").write.mode("append").saveAsTable("tab1")
sql("select * from tab1").show

或者是ORC qazxsw poi的更完整的例子;提取物下面:

here
© www.soinside.com 2019 - 2024. All rights reserved.