我们从存储在NetCDF文件中的一堆数据开始。然后编写了一些Java代码,以便从NetCDF文件中创建序列文件。我们对代码的最初意图不太了解,但是我们已经能够了解一些关于序列文件本身的知识。最终,我们试图使用这些序列文件在Hive中创建表,但目前似乎无法做到这一点。
我们知道序列文件中的键和值存储为实现WritableComparable的对象。我们还能够创建Java代码来迭代序列文件中的所有数据。
那么,要真正让Hive正确地读取这些序列文件的对象中的数据,需要什么呢?
感谢先进的!
更新:之所以很难准确地描述我在哪里遇到问题,是因为我不一定会遇到任何错误。Hive只是简单地不正确地读取序列文件。在我的序列文件上运行Hadoop -text命令时,我会得到这样的对象列表:
NetCDFCompositeKey@263c7e3f,NetCDFRecordWritable@4d846db5
数据在这些对象本身中。因此,目前在@Tariq的帮助下,我认为要真正读取这些对象,我必须做的是创建一个自定义InputFormat来读取键,并创建一个自定义SerDe来序列化和反序列化这些对象?
发布于 2013-08-06 20:00:59
对不起,我无法从你的问题中了解你到底在哪里面临着这个问题。如果您希望通过Hive使用SequenceFiles,只需在发出CREATE时添加存储为SEQUENCEFILE子句(很可能您已经知道这一点,没有什么新的)。在处理SequenceFiles时,Hive将SequenceFiles的每个键/值对处理得类似于普通文件中的行。重要的是钥匙会被忽略。除此之外,没什么特别的。
尽管如此,如果您希望同时读取键和值,则可能必须编写一个可以同时读取键和值的自定义InputFormat。例如,请参见此项目。它允许我们访问存储在SequenceFile的密钥中的数据。
此外,如果您的键和值是自定义类,则还需要编写一个SerDe来序列化和反序列化数据。
HTH
记者:我不知道这是不是你要找的。如果不是,请让我知道,并在你的问题上增加一些细节。我试着解决这个问题。
https://stackoverflow.com/questions/18087724
复制相似问题