【问题标题】:XML Serde for Hadoop/Hive用于 Hadoop/Hive 的 XML Serde
【发布时间】:2018-08-18 03:28:26
【问题描述】:

我使用 JSONSerde 处理使用 Amazon EMR 存储在 S3 上的大量 JSON 数据。我的一个客户需要处理大量 XML 数据,但我找不到任何与 HIVE 一起使用的 XML Serde。

你们用 hive 处理过 XML 吗?在我开始构建我自己的 XML Serde 之前,我将不胜感激您的建议和 cmets。

【问题讨论】:

  • 您应该能够构建一个与 JSON serde 非常相似的 XML serde。
  • 是的,但我很惊讶 XML 处理不是一个常见的用例,而且还不存在。

标签: hadoop hive


【解决方案1】:

我在 hive 中使用以下 XML 解析 serde ---

CREATE EXTERNAL TABLE XYZ(
X STRING, 
Y STRING, 
Z ARRAY<STRING>
 )
ROW FORMAT SERDE 'com.ibm.spss.hive.serde2.xml.XmlSerDe'
WITH SERDEPROPERTIES (
"column.xpath.X"="/XX/@X",
"column.xpath.Y"="/YY/@Y"
)
STORED AS
INPUTFORMAT 'com.ibm.spss.hive.serde2.xml.XmlInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
LOCATION '/user/XXX' 
TBLPROPERTIES (
"xmlinput.start"="<xml start",
"xmlinput.end"="</xml end>"
);

【讨论】:

    【解决方案2】:

    xmlserde 的下载链接是 http://central.maven.org/maven2/com/ibm/spss/hive/serde2/xml/hivexmlserde/1.0.0.0/hivexmlserde-1.0.0.0.jar

    将此jar文件放在路径/usr/lib/hive/lib中

    完成此操作后,您可以使用此 xml serde:

       CREATE TABLE xml_bank(customer_id STRING, income BIGINT, demographics 
       map<string,string>, financial map<string,string>)
       ROW FORMAT SERDE 'com.ibm.spss.hive.serde2.xml.XmlSerDe'
       WITH SERDEPROPERTIES (
       "column.xpath.customer_id"="/record/@customer_id",
       "column.xpath.income"="/record/income/text()",
       "column.xpath.demographics"="/record/demographics/*",
       "column.xpath.financial"="/record/financial/*"
        )
        TBLPROPERTIES (
        "xmlinput.start"="<record customer",
        "xmlinput.end"="</record>"
        );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-08
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多