【问题标题】:appending to ORC file附加到 ORC 文件
【发布时间】:2016-12-12 02:26:15
【问题描述】:

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

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

再澄清一点,将Javautil.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>

这些是否正确,是否有任何相关信息?

【问题讨论】:

  • 如果您不发布代码,我们将无法帮助您
  • 感谢您的回复,但我问的是一般情况。 ORC 文件是否支持追加操作。我在任何地方都找不到相关信息。

标签: hadoop hive orc


【解决方案1】:

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 here;在摘录下方:

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

【讨论】:

    【解决方案2】:

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

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

    元数据在数据之后写入,以允许单次写入

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 如果我理解正确,它会合并多个文件,但我正在寻找的是在不创建新文件并合并它的情况下将数据添加到现有文件的选项。
      猜你喜欢
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      • 2020-09-21
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      • 2013-05-13
      相关资源
      最近更新 更多