[HADOOP] 하이브에서 측면보기를 사용하는 동안 예외
HADOOP하이브에서 측면보기를 사용하는 동안 예외
나는 Hive에서 xml 데이터를 파싱하기 위해 아래의 코드를 사용하고있다. 내 xml 데이터에서 몇 개의 태그가 반복되므로 벽돌 상자와 측면보기를 사용하여 태그를 파싱하고 하이브 테이블에 배치합니다. 그러나 코드를 실행할 때 오류가 발생합니다. 내가 뭘 잘못하고 있는지 이해할 수 없으니 도와주세요.
암호:
add jar /home/cloudera/brickhouse-0.5.5.jar;
CREATE TEMPORARY FUNCTION numeric_range AS 'brickhouse.udf.collect.NumericRange';
CREATE TEMPORARY FUNCTION array_index AS 'brickhouse.udf.collect.ArrayIndexUDF';
add jar /home/cloudera/hivexmlserde-1.0.5.3.jar;
set hive.exec.mode.local.auto=false;
DROP TABLE IF EXISTS medinfo2;
create table medinfo2 as
select array_index(statusCode,n) AS statusCode,
array_index(startTime,n) AS startTime,
array_index(endTime,n) AS endTime,
array_index(strengthValue,n) AS strengthValue,
array_index(strengthUnits,n) AS strengthUnits
from medications_info7 lateral view numeric_range(size( statusCode )) n1 as n;
오류:
견본:
<document>
<code>10160-0</code>
<entryInfo>
<statusCode>completed</statusCode>
<startTime>20110729</startTime>
<endTime>20110822</endTime>
<strengthValue>24</strengthValue>
<strengthUnits>h</strengthUnits>
</entryInfo>
<entryInfo>
<statusCode>completed</statusCode>
<startTime>20120130</startTime>
<endTime>20120326</endTime>
<strengthValue>12</strengthValue>
<strengthUnits>h</strengthUnits>
</entryInfo>
<entryInfo>
<statusCode>completed</statusCode>
<startTime>20100412</startTime>
<endTime>20110822</endTime>
<strengthValue>8</strengthValue>
<strengthUnits>d</strengthUnits>
</entryInfo>
</document>
내 실제 샘플 크기가 크고 반복되는 이러한 태그가 많이 포함되어 있습니다.
해결법
-
==============================
1.Hive에서 데이터가 어떻게 보이는지 알지 못합니다. 여기에 정보를 제공하지 않았으므로 여기에 XML을 하이브에로드하는 방법이 있습니다.
Hive에서 데이터가 어떻게 보이는지 알지 못합니다. 여기에 정보를 제공하지 않았으므로 여기에 XML을 하이브에로드하는 방법이 있습니다.
짐을 싣는 사람:
ADD JAR /path/to/jar/hivexmlserde-1.0.5.3.jar; DROP TABLE IF EXISTS db.tbl; CREATE TABLE IF NOT EXISTS db.tbl ( code STRING, entryInfo ARRAY<MAP<STRING,STRING>> ) ROW FORMAT SERDE 'com.ibm.spss.hive.serde2.xml.XmlSerde' WITH SERDEPROPERTIES ( "column.xpath.code"="/document/code/text()", "column.xpath.entryInfo"="/document/entryInfo/*" ) STORED AS INPUTFORMAT 'com.ibm.spss.hive.serde2.xml.XmlInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat' TBLPROPERTIES ( "xmlinput.start"="<document>", "xmlinput.end"="</document>" ); LOAD DATA LOCAL INPATH 'someFile.xml' INTO TABLE db.tbl;
섹션 3 - 배열의 Hive-XML-SerDe 문서에서 배열 구조를 사용하여 반복되는 태그를 처리하고 4 개의 맵에서 하위 태그 아래의 항목을 처리하기 위해 맵을 사용하는 것을 볼 수 있습니다. 따라서 entryInfo는 ARRAY
그런 다음이 배열을 분해하고 키 / 값처럼 수집 한 다음 다시 결합 할 수 있습니다.
질문:
ADD JAR /path/to/jar/hivexmlserde-1.0.5.3.jar; ADD JAR /path/to/jars/brickhouse-0.7.1.jars; CREATE TEMPORARY FUNCTION COLLECT AS 'brickhouse.udf.collect.CollectUDAF'; SELECT code , m_map['statusCode'] AS status_code , m_map['startTime'] AS start_time , m_map['endTime'] AS end_time , m_map['strengthValue'] AS strength_value , m_map['strengthUnits'] AS strength_units FROM ( SELECT code , COLLECT(m_keys, m_vals) AS m_map FROM ( SELECT code , idx , MAP_KEYS(entry_info_map)[0] AS m_keys , MAP_VALUES(entry_info_map)[0] AS m_vals FROM ( SELECT code , entry_info_map , CASE WHEN FLOOR(tmp / 5) = 0 THEN 0 WHEN FLOOR(tmp / 5) = 1 THEN 1 WHEN FLOOR(tmp / 5) = 2 THEN 2 ELSE -1 END AS idx FROM db.tbl LATERAL VIEW POSEXPLODE(entryInfo) exptbl AS tmp, entry_info_map ) x ) y GROUP BY code, idx ) z
산출:
code status_code start_time end_time strength_value strength_units 10160-0 completed 20110729 20110822 24 h 10160-0 completed 20120130 20120326 12 h 10160-0 completed 20100412 20110822 8 d
또한 기본적으로이 질문을 네 번 (1, 2, 3, 4) 번씩했습니다. 이것은 좋은 생각이 아닙니다. 한번만 묻고, 더 많은 정보를 추가하고, 인내심을 가지고 편집하십시오.
from https://stackoverflow.com/questions/41481582/exception-while-using-lateral-view-in-hive by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Apache Spark : 코어의 수와 집행자의 수 (0) | 2019.06.12 |
---|---|
[HADOOP] combineByKey를 사용하여 출력을 (키, 반복 가능 [값])으로 가져옵니다. (0) | 2019.06.12 |
[HADOOP] 창 기능이 Pyspark sqlcontext에서 작동하지 않습니다. (0) | 2019.06.12 |
[HADOOP] 결합기 구현 및 내부 작업 (0) | 2019.06.12 |
[HADOOP] 이클립스 Hadoop 플러그인 문제 (localhost / 127.0.0.1 : 50070으로 전화 걸기) 어떤 시체라도 나에게이 솔루션을 줄 수 있습니까? (0) | 2019.06.12 |