2016-10-13 13 views
1

JSON 배열에서 작동하는 Hive 용 스칼라 UDF를 작성하려고합니다. org.apache.hadoop.hive.ql.exec.UDF을 확장하고 play-json의 play.api.libs.json.parse에 의존합니다.스칼라에서 하이브 UDF로 JSON을 파싱하기

하이브 내에서 전화를 걸 때 java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonToken.id()I이 표시됩니다.

여기에 원인이 무엇인지 잘 모르겠습니다 - 잭슨 버전과 호환되지 않는 경우 어떻게해야합니까?

내가 묶는 유일한 구성 요소/버전은 하이브 1.2입니다.

+0

JSON 종속성이 맞습니까? UDF jar에 올바른 버전의 JSON 종속성이 있습니까? – Shankar

+0

UDF는 종속성과 함께 패키징됩니다 (제공되는 Hadoop/Hive를 제외하고). 독립 실행 형 기능으로 테스트/잘 작동합니다. – cohoz

+0

UDF 지방 병에있는 jackson core jar의 버전은 무엇입니까? – Shankar

답변

0

Brickhouse (http://github.com/klout/brickhouse)의 JSON UDF를 살펴보십시오. Brickhouse는 UDF의 to_jsonfrom_json을 가지고 있으며, 편의점 기능 json_mapjson_split은지도와 배열을 직접 처리합니다.

버전 관리 문제와 관련하여 Brickhouse는 1.8.8 버전을 사용하여 Jackson을 사용하고 있으며이 특정 버전 문제는 발생하지 않았습니다.

0

이것은 잭슨 호환이 아닌 것으로 생각됩니다.

하이브 1.2는 Jackson 1.9.2을 사용하지만 이후 버전은 최근 버전 (지난 2 년)의 Play-JSON에서 사용됩니다.

이전 버전의 Play-JSON으로 되돌릴 수 없다면 가장 간단한 해결 방법은 Jackson에 의존하지 않는 Scala JSON 구문 분석 라이브러리를 사용하는 것입니다. Rapture JSON은 여러 백엔드와 함께 사용할 수 있으므로 좋은 선택 일 수 있습니다.