我们从存储在netcdf文件中的一堆数据开始。在此基础上,编写了一些java代码来从netcdf文件创建序列文件。我们不太了解代码的初衷,但是我们已经能够了解一点序列文件本身。最终,我们尝试使用这些序列文件在配置单元中创建表,但目前似乎无法做到这一点。
我们知道序列文件中的键和值存储为实现可写可比较的对象。我们还能够创建java代码来迭代序列文件中的所有数据。
那么,要让配置单元正确读取这些序列文件的对象中的数据,有什么必要呢?
提前谢谢!
更新:之所以很难准确描述我遇到的问题,是因为我不一定会出错。hive只是错误地读取了序列文件。在序列文件上运行hadoop-text命令时,会得到如下对象列表:
netcdfcompositekey@263c7e3f , netcdfrecordwritable@4d846db5
数据在这些对象本身中。因此,目前在@tariq的帮助下,我相信要真正读取这些对象,我要做的是创建一个自定义inputformat来读取键,并创建一个自定义serde来序列化和反序列化对象?
1条答案
按热度按时间4urapxun1#
很抱歉,我无法从你的问题中理解你到底面临着什么问题。如果您希望通过配置单元使用sequencefiles,只需在发出create table时添加stored as sequencefile子句(很可能您已经知道这一点,没有什么新的)。在处理sequencefiles时,hive会将sequencefiles的每一个键/值对视为与普通文件中的行相似。重要的是这里的钥匙将被忽略。除此之外没有什么特别的。
话虽如此,如果您希望同时读取键和值,您可能需要编写一个可以同时读取键和值的自定义inputformat。以这个项目为例。它允许我们访问存储在sequencefile密钥中的数据。
此外,如果键和值是自定义类,则还需要编写serde来序列化和反序列化数据。
hth公司
p、 s:我不知道这是否正是你想要的。如果不是的话,一定要告诉我,并给你的问题加上更多的细节。我会试着解决这个问题。