PIG替换多列

时间:2015-09-03 00:00:28

标签: hadoop apache-pig

我总共有大约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

1 个答案:

答案 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)

很可惜你有三列以上,但由于你是所有人的分组,脚本应该推广到任意数量的列。