0

在将 XML 数据文件加载到 HIVE 表中时,我收到以下错误消息:

FAILED: SemanticException 7:9 Input format must implement InputFormat. Error   encountered near token 'StoresXml'.  

我加载 XML 文件的方式如下:

**创建一个表StoresXml

   'CREATE EXTERNAL TABLE StoresXml (storexml string)
   STORED AS INPUTFORMAT 'org.apache.mahout.classifier.bayes.XmlInputFormat'
   OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
   LOCATION '/user/hive/warehouse/stores';'

** 位置 /user/hive/warehouse/stores 在 HDFS 中。

load data inpath <local path where the xml file is stored> into table StoresXml;

现在,问题是当我从表 StoresXml 中选择任何列时,就会出现上述错误。

请帮帮我。我哪里出错了?

4

3 回答 3

0

1)首先你需要创建单列表,如

CREATE TABLE xmlsample(xml string);

2)之后,您需要将本地/hdfs中的数据加载到配置单元表中

LOAD DATA INPATH '---------' INTO TABLE XMLSAMPLE;

3) 接下来使用XPATH, XPATH_ARRAY, XPATH_STRINGLIKE SAMPLE XML QUERIES..

于 2013-12-05T09:37:23.837 回答
0

我刚刚使用 XML 文件的 xpath 将此 transactions.xml 文件加载到 hive 表中:**将 xml 文件的记录放入一行:

terminal> cat /home/cloudera/Desktop/Test/Transactions_xml.xml | tr -d '&' | tr '\n' ' ' | tr '\r' ' ' | sed 's|</record>|</record>\n|g' | grep -v '^\s*$' > /home/cloudera/Desktop/trx_xml;

terminal> hadoop fs -put /home/cloudera/Desktop/trx_xml.xml  /user/cloudera/DataTest/Transactions_xml

hive>create table Transactions_xml1(xmldata string);

hive>load data inpath '/user/cloudera/DataTest/Transactions_xml' overwrite into table Transactions_xml1;

hive>create table Transactions_xml(trx_id int,account int,amount int);

hive>insert overwrite table Transactions_xml select xpath_int(xmldata,'record/Tid'),
xpath_int(xmldata,'record/AccounID'),
xpath_int(xmldata,'record/Amount') from Transactions_xml1;

我希望这能帮到您。让我知道结果。

于 2016-06-01T14:27:52.863 回答
-2

我开发了一个从 csv 文件生成配置单元脚本的工具。以下是有关如何生成文件的几个示例。工具——https: //sourceforge.net/projects/csvtohive/?source=directory

  1. 使用浏览选择一个 CSV 文件并设置 hadoop 根目录,例如:/user/bigdataproject/

  2. 工具使用所有 csv 文件生成 Hadoop 脚本,以下是生成的 Hadoop 脚本示例,用于将 csv 插入 Hadoop

    #!/bin/bash -v
    hadoop fs -put ./AllstarFull.csv /user/bigdataproject/AllstarFull.csv hive -f ./AllstarFull.hive

    hadoop fs -put ./Appearances.csv /user/bigdataproject/Appearances.csv hive -f ./Appearances.hive

    hadoop fs -put ./AwardsManagers.csv /user/bigdataproject/AwardsManagers.csv hive -f ./AwardsManagers.hive

  3. 生成的 Hive 脚本示例

    CREATE DATABASE IF NOT EXISTS lahman;
    USE lahman;
    CREATE TABLE AllstarFull (playerID string,yearID string,gameNum string,gameID string,teamID string,lgID string,GP string,startingPos string) row format delimited fields terminated by ',' stored as textfile;
    LOAD DATA INPATH '/user/bigdataproject/AllstarFull.csv' OVERWRITE INTO TABLE AllstarFull;
    SELECT * FROM AllstarFull;

谢谢维杰

于 2015-04-09T10:34:02.697 回答