首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >附加到ORC文件

附加到ORC文件
EN

Stack Overflow用户
提问于 2016-08-05 15:46:02
回答 3查看 6.1K关注 0票数 3

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

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

另一个说明是,当将Java util.Date对象保存到ORC文件中时,ORC类型存储为:

代码语言:javascript
复制
struct<timestamp:struct<fasttime:bigint,cdate:struct<cachedyear:int,cachedfixeddatejan1:bigint,cachedfixeddatenextjan1:bigint>>,

对于java BigDecimal,它是:

代码语言:javascript
复制
<margin:struct<intval:struct<signum:int,mag:struct<>,bitcount:int,bitlength:int,lowestsetbit:int,firstnonzerointnum:int>

这些是正确的吗?有关于这个的任何信息吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-05 20:44:01

不,您不能直接附加到ORC文件。或者是一个Parquet文件。也不适用于任何具有复杂内部结构和元数据交织的柱状格式。

引用官方的"Apache Parquet“网站..。

元数据是在数据之后写入的,以便允许单程写入

然后引用官方的"阿帕奇兽人“网站..。

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

从技术上讲,现在您可以附加到HDFS文件,甚至可以截断它。但这些技巧仅适用于某些边缘情况(例如,将消息输入到HDFS“日志文件”中,以微批处理的方式进行,并不时使用fflush )。

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

票数 2
EN

Stack Overflow用户

发布于 2017-12-27 16:58:17

更新2017年

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

下面是一个例子

代码语言:javascript
复制
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

或与兽人这里的一个更完整的例子;下面是一个摘录:

代码语言:javascript
复制
val command = spark.read.format("jdbc").option("url" .... ).load()
command.write.mode("append").format("orc").option("orc.compression","gzip").save("command.orc")
票数 3
EN

Stack Overflow用户

发布于 2016-08-05 19:01:27

是的,这是可能的,通过蜂巢,你基本上可以‘连接’较新的数据。来自蜂巢官方文档https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions#HiveTransactions-WhatisACIDandwhyshouldyouuseit

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38793170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档