문제

돼지에 다음과 같은 정보가 있다고 가정합니다.

some

그리고 나는 그것을 다음으로 변환하고 싶습니다.

s
so
som
some

나는 (아직) 돼지 라틴어로 chararray를 반복 할 수있는 방법을 찾지 못했습니다. 토큰 화 기능을 찾았지만 단어 경계에 분열됩니다. 그렇다면 "돼지 라틴어"가이 일을 할 수 있습니까?

도움이 되었습니까?

해결책

Niels, Tokenize는 구분 기 논쟁을 취하므로 각 문자를 분할 할 수 있습니다. 그러나 나는 그것을 생산하는 방법을 생각할 수 없다 겹치는 토큰.

그래도 돼지에 UDF를 쓰는 것은 매우 간단합니다. Evalfunc이라는 간단한 인터페이스를 구현합니다 (자세한 내용 : 여기 : http://wiki.apache.org/pig/udfmanual ). 돼지는 사용자가 대부분의 모든 것을 처리하기 위해 자신의 기능을 작성한다는 아이디어를 중심으로 구축되었으며, 따라서 자신의 UDF를 작성하는 것은 일반적이고 자연스러운 일입니다.

더 쉬운 옵션은 효율적이지는 않지만 돼지 스트리밍을 사용하여 스크립트를 통해 데이터를 전달하는 것입니다 (일회성 작업을위한 Java 클래스를 구현하는 것보다 빠른 Perl 또는 Python 스크립트를 더 빨리 휘젓는 것입니다). 여기에는 이것의 예가 있습니다. http://www.cloudera.com/blog/2009/06/17/analyzing-apache-logs-with-pig/ -기존 라이브러리, PERL 스크립트, UDF, 심지어 비행 내 AWK 스크립트의 사용을 보여줍니다.

다른 팁

맞춤 UDF를 쓰지 않고 돼지 스트리밍 및 파이썬으로 수행 할 수있는 방법은 다음과 같습니다.

데이터가 단지 1 개의 단어 열이라고 가정 해보십시오. Python 스크립트 (WordSeq.py라고 부르면)는 다음과 같습니다.

#!/usr/bin/python
### wordSeq.py ### [don't forget to chmod u+x wordSeq.py !]
import sys
for word in sys.stdin:
  word = word.rstrip()
  sys.stdout.write('\n'.join([word[:i+1] for i in xrange(len(word))]) + '\n')

그런 다음 돼지 스크립트에서 돼지에게 위의 스크립트와 함께 스트리밍을 사용하고 필요에 따라 스크립트를 배송하려고한다고 말합니다.

-- wordSplitter.pig ---
DEFINE CMD `wordSeq.py` ship('wordSeq.py');
W0 = LOAD 'words';
W = STREAM W0 THROUGH CMD as (word: chararray);

Piggybank 라이브러리를 사용하십시오.

http://hadoop.apache.org/pig/docs/r0.7.0/api/org/apache/pig/piggybank/evaluation/string/substring.html

이렇게 사용하십시오 :

REGISTER /path/to/piggybank.jar;
DEFINE SUBSTRING org.apache.pig.piggybank.evaluation.string.SUBSTRING();

OUTPUT = FOREACH INPUT GENERATE SUBSTRING((chararray)$0, 0, 10);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top