首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有效地将avro记录写入avro文件

有效地将avro记录写入avro文件
EN

Stack Overflow用户
提问于 2015-11-23 14:45:53
回答 2查看 1.9K关注 0票数 0

如何有效地将新的avro记录添加到现有avro文件中。我的avro文件将继续增长的大小,我不想打开文件到memory.Could你请告诉我们,我们可以如何有效地实现这一点。

EN

回答 2

Stack Overflow用户

发布于 2015-11-24 15:01:45

您可以使用DataFileWriter.appendTo。这不会在内存中加载现有文件的内容。(在幕后,它将读取文件的开头以查找模式和其他元数据,然后附加到末尾,而不加载中间的内容。)

如果你想在HDFS上做到这一点,this gist可能也是一个很好的起点。

票数 0
EN

Stack Overflow用户

发布于 2018-05-19 22:54:18

你的问题和相关技术是模棱两可的,但我会尽我所能回答。我将假设您是在HDFS中执行此操作。

data in dir vs files

在HDFS中,您可以考虑目录而不是文件。Hadoop生态系统中的工具,例如hive或spark,允许您从目录中读取“数据”,而无需考虑目录中存储的文件数量。这样,您将文件添加到目录中,您的“查询”将逐步显示或获取越来越多的数据。

AVRO , record based

我会把AVRO文件看作是avro记录。假设您有一个avro模式,您在内存/程序/代码中生成了一个对象,并将其转换为AVRO格式。此对象将转换为一个avro记录。如果您将数据写入文件,则这将是一条avro记录。在10天的过程中,如果您在同一目录中写入10个文件,当您读取“目录”时,您现在将拥有10条记录。

immutability

通常,我会认为HDFS数据是不可变的。任何写入的文件主要是被读取的,而不是被修改的。同样的情况也适用于AVRO记录,它只是一个包含模式和数据的文件。也就是说,您通常不会读取相同的文件并对其进行修改。我假设您将添加新数据,而不是修改它。因此,您将只创建新记录。

serialize multiple objects to one file

现在让我们考虑一下,您确实想要将“多个”对象写入到一个文件中。我将假设您在给定的时间点实际拥有这些多个对象,并且希望持久化到单个文件中。如果您使用jackson-dataformat-avro,它会提供一个SequenceWriter来实现这一点。

代码语言:javascript
复制
SequenceWriter w = mapper.writer(schema).writeValues(mySingleAvroFile); 
w.write(firstObject); 
w.write(secondObject); 
...
w.close(); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33865109

复制
相关文章

相似问题

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