我们从一堆存储在NetCDF文件中的数据开始。从那里开始,编写了一些Java代码来从NetCDF文件创建序列文件。我们对代码的原始意图知之甚少,但我们已经能够了解序列文件本身。最终,我们尝试使用这些序列文件在Hive中创建表,但目前似乎无法这样做。
我们知道序列文件中的键和值存储为实现WritableComparable的对象。我们还能够创建Java代码来迭代序列文件中的所有数据。
那么,实际让Hive正确读取这些序列文件的对象内的数据有什么必要呢?
先谢谢!
更新:之所以如此难以描述我遇到麻烦的原因是因为我不一定会收到任何错误。 Hive只是错误地读取序列文件。在我的序列文件上运行Hadoop -text命令时,我得到一个对象列表:
NetCDFCompositeKey @ 263c7e3f,NetCDFRecordWritable @ 4d846db5
数据在这些对象本身内。那么,目前在@Tariq的帮助下,我相信为了实际读取这些对象我必须做的是创建一个自定义的InputFormat来读取键和一个自定义的SerDe来序列化和反序列化这些对象?
答案 0 :(得分:1)
对不起,我无法从您的问题中了解您究竟面临的问题。如果你希望通过Hive使用SequenceFiles,你只需要在发出CREATE TABLE时添加STORED AS SEQUENCEFILE子句(很可能你已经知道了,没什么新东西)。在处理SequenceFiles时,Hive会将SequenceFiles的每个键/值对视为与普通文件中的行类似。这里重要的是密钥将被忽略。除此之外没什么特别的。
话虽如此,如果您希望同时读取键和值,您可能必须编写一个可以读取键和值的自定义InputFormat。例如,请参阅此project。它允许我们访问存储在SequenceFile键中的数据。
此外,如果您的键和值是自定义类,您还需要编写一个SerDe来序列化和反序列化您的数据。
HTH
P.S。 :我不知道这是不是你想要的。如果不是,请告诉我,并在您的问题中添加更多细节。我会尝试解决这个问题。