복붙노트

[HADOOP] 돼지 라틴어 줄에 JSON 배열에 파일을로드하는 방법

HADOOP

돼지 라틴어 줄에 JSON 배열에 파일을로드하는 방법

기존 스크립트는, 예를 들어, 한 줄에 JSON 객체의 배열로 텍스트 파일을 생성

[{"foo":1,"bar":2},{"foo":3,"bar":4}]
[{"foo":5,"bar":6},{"foo":7,"bar":8},{"foo":9,"bar":0}]
…

나는 배열을 폭발하고 각 개별 객체를 처리하고, 돼지에서이 데이터를로드하고 싶습니다.

나는 아무 소용 트위터의 코끼리 새의 JsonLoader를 사용하여 살펴 보았다. 그것은 JSON에 대해 불평하지 않습니다,하지만 난 다음 실행 "성공적으로 0 기록을 읽기"얻을 :

register '/tmp/elephant-bird/core/target/elephant-bird-core-4.3-SNAPSHOT.jar';
register '/tmp/elephant-bird/hadoop-compat/target/elephant-bird-hadoop-compat-4.3-SNAPSHOT.jar';
register '/tmp/elephant-bird/pig/target/elephant-bird-pig-4.3-SNAPSHOT.jar';
register '/usr/local/lib/json-simple-1.1.1.jar';

a = load '/path/to/file.json' using com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad=true');
dump a;

또한 각 라인을 치료, 정상으로 파일을로드 시도 JSON으로,하지만 트릭을 할 것으로 보이는 기존 UDF를 찾을 수 없다는 분석하려고 다음 하나의 열 chararray을 포함하고.

어떤 아이디어?

해결법

  1. ==============================

    1.도널드 말했듯이, 당신은 여기에 UDF를 사용해야합니다. 여기 Xplenty에서 우리는 ElephantBird의 JsonStringToMap을 보완하기 위해 JsonStringToBag을 썼다.

    도널드 말했듯이, 당신은 여기에 UDF를 사용해야합니다. 여기 Xplenty에서 우리는 ElephantBird의 JsonStringToMap을 보완하기 위해 JsonStringToBag을 썼다.

  2. from https://stackoverflow.com/questions/19863628/how-to-load-a-file-with-a-json-array-per-line-in-pig-latin by cc-by-sa and MIT license