附加到orc文件

du7egjpx  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(379)

我对大数据和相关技术还不熟悉,所以我不确定我们是否可以将数据附加到现有的orc文件中。我正在使用javaapi编写orc文件,当我关闭writer时,我无法再次打开该文件以向其写入新内容,基本上是添加新数据。
有没有一种方法可以将数据附加到现有的orc文件中,可以使用javaapi、hive或任何其他方法?
在保存java时,还有一点需要澄清 util.Date 对象,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>

这些是正确的吗?有什么信息吗?

sdnqo3pr

sdnqo3pr1#

不,不能直接附加到orc文件。也不是Parquet锉刀。也不适用于任何内部结构复杂、元数据与数据交错的列格式。
引用官方的“ApacheParquet”网站。。。
元数据在数据之后写入,以允许单次写入。
然后引用官方的“Apache兽人”网站。。。
由于hdfs不支持在文件写入后更改文件中的数据,orc将顶层索引存储在文件的末尾(…)。文件的尾部由3部分组成;文件元数据、文件页脚和postscript。
从技术上讲,现在可以附加到hdfs文件中;你甚至可以截断它。但这些技巧只对某些边缘情况有用(例如,flume将消息传送到hdfs“日志文件”(micro-batch-wise)中,使用 fflush 有时)。
对于配置单元事务支持,他们使用不同的技巧:在每个事务(即微批处理)上创建一个新的orc文件,并在后台运行定期压缩作业,à 拉赫巴斯。

m0rkklqb

m0rkklqb2#

2017年更新
是的,现在你可以了!hive提供了对acid的新支持,但是您可以使用append模式将数据追加到表中 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

或者更完整的兽人的例子;摘录如下:

val command = spark.read.format("jdbc").option("url" .... ).load()
command.write.mode("append").format("orc").option("orc.compression","gzip").save("command.orc")
ybzsozfc

ybzsozfc3#

是的,这是可能的,通过配置单元,您可以基本上'串联'较新的数据。来自hive官方文档https://cwiki.apache.org/confluence/display/hive/hive+transactions#hivetransactions-什么酸?你为什么要用它?

相关问题