我总共有大约150列,想要搜索\ t并用空格替换
A = LOAD 'db.table' USING org.apache.hcatalog.pig.HCatLoader();
B = GROUP A ALL;
C = FOREACH B GENERATE REPLACE(B, '\\t', ' ');
STORE C INTO 'location';
此输出产生所有唯一的单词作为输出。
是否有更好的方法可以立即替换所有列?
谢谢 NIVI
答案 0 :(得分:1)
您可以使用Python UDF执行此操作。假设你有一些这样的数据,其中有标签:
数据强>:
hi there friend,whats up,nothing much
yo yo yo,green eggs, ham
你可以用Python写这个
<强> UDF 强>:
@outputSchema("datums:{(no_tabs:chararray)}")
def remove_tabs(columns):
try:
out = [tuple(map(lambda s: s.replace("\t", " "), x)) for x in columns]
return out
except:
return [(None)]
然后在猪
<强>查询强>:
REGISTER 'remove_tabs.py' USING jython AS udf;
data = LOAD 'toy_data' USING PigStorage(',') AS (col0:chararray,
, col1:chararray, col2:chararray);
grpd = GROUP data all;
A = FOREACH grpd GENERATE FLATTEN(udf.remove_tabs(data));
DUMP A;
<强>输出强>:
(hi there friend,whats up,nothing much)
(yo yo yo,green eggs,ham)
很可惜你有三列以上,但由于你是所有人的分组,脚本应该推广到任意数量的列。