Hadoop hive serde - 输入格式必须实现InputFormat

时间:2015-10-20 11:15:19

标签: hadoop hive user-defined-functions

我使用SerDe来处理我的XML数据,并为XML数据创建自定义的InputFormat和RecordRedaer。

以下是课程的签名 -

SerDe课程 -

public class XMLSerde extends AbstractSerDe {

输入格式 -

public class XMLInputFormat extends FileInputFormat<LongWritable, BookWritable> {

    @Override
    public RecordReader<LongWritable, BookWritable> createRecordReader(InputSplit arg0,
            TaskAttemptContext arg1) throws IOException, InterruptedException {
        // TODO Auto-generated method stub
        return new XMLRecordReader();
    }

RecordReader -

public class XMLRecordReader extends RecordReader<LongWritable, BookWritable> {

BookWritable是我创建的自定义Writable类。

现在当我使用这个serde时如下 -

CREATE TABLE xml_items(Author STRING, Title STRING, ISBN STRING) ROW FORMAT SERDE 'com.xml.serde.XMLSerde' STORED AS INPUTFORMAT 'com.xml.serde.XMLInputFormat';

我在此表上运行select查询时遇到错误。

FAILED: SemanticException 1:14 Input format must implement InputFormat. Error encountered near token 'books'

请建议。 AJ

1 个答案:

答案 0 :(得分:0)

Hive仅支持旧的mareduce API。 您应该从org.apache.hadoop.mapred.FileInputFormat类继承XMLInputFormat。