我使用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
答案 0 :(得分:0)
Hive仅支持旧的mareduce API。 您应该从org.apache.hadoop.mapred.FileInputFormat类继承XMLInputFormat。