假设我在Pig中有以下输入:
some
我希望你能将这个转化为:
s
so
som
some
我还没有找到在pig latin中迭代chararray的方法。我找到了TOKENIZE函数,但它是按单词边界拆分的。 那么“pig latin”能做到这一点吗?还是需要Java类来实现?
some
我希望你能将这个转化为:
s
so
som
some
我还没有找到在pig latin中迭代chararray的方法。我找到了TOKENIZE函数,但它是按单词边界拆分的。 那么“pig latin”能做到这一点吗?还是需要Java类来实现?
以下是使用pig streaming和Python进行操作的方法,无需编写自定义UDF:
假设您的数据只有一个单词列。用于处理数据的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')
然后,在您的pig脚本中,告诉pig您正在使用上述脚本进行流处理,并且您希望根据需要发送您的脚本:
-- wordSplitter.pig ---
DEFINE CMD `wordSeq.py` ship('wordSeq.py');
W0 = LOAD 'words';
W = STREAM W0 THROUGH CMD as (word: chararray);
使用piggybank库。
使用方法如下:
REGISTER /path/to/piggybank.jar;
DEFINE SUBSTRING org.apache.pig.piggybank.evaluation.string.SUBSTRING();
OUTPUT = FOREACH INPUT GENERATE SUBSTRING((chararray)$0, 0, 10);