Update:好吧,事实证明以下不起作用的原因是因为我使用的是较新版本的InputFormat
API (import org.apache.hadoop.mapred
这是旧的与import org.apache.hadoop.mapreduce
这是新的)。我遇到的问题是将现有代码移植到新代码。有没有人有写多行的经验InputFormat
使用旧的API?
尝试使用 Hadoop/Hive 处理 Omniture 的数据日志文件。文件格式是制表符分隔的,虽然在大多数情况下非常简单,但它们确实允许您在字段中包含多个新行和制表符,并通过反斜杠转义(\\n
and \\t
)。因此,我选择创建自己的 InputFormat 来处理多个换行符,并在 Hive 尝试对选项卡进行拆分时将这些选项卡转换为空格。我刚刚尝试将一些示例数据加载到 Hive 中的表中,但出现以下错误:
CREATE TABLE (...)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS INPUTFORMAT 'OmnitureDataFileInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat';
FAILED: Error in semantic analysis: line 1:14 Input Format must implement InputFormat omniture_hit_data
奇怪的是我的输入格式确实扩展了org.apache.hadoop.mapreduce.lib.input.TextInputFormat
(https://gist.github.com/4a380409cd1497602906 https://gist.github.com/4a380409cd1497602906).
Hive 是否需要您扩展org.apache.hadoop.hive.ql.io.HiveInputFormat
反而?如果是这样,我是否必须重写 InputFormat 和 RecordReader 的任何现有类代码,或者我可以有效地更改它扩展的类吗?
查看 LineReader 和 TextInputFormat 的代码后发现了这一点。创建了一个新的 InputFormat 以及 EscapedLineReader 来处理此问题。
https://github.com/msukmanowsky/OmnitureDataFileInputFormat https://github.com/msukmanowsky/OmnitureDataFileInputFormat
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)