hadoop - pig 拉丁问题

标签 hadoop apache-pig

请帮助我。.它真的很紧急..最后期限即将来临,并且自2周以来我一直坚持下去。.伤了我的头,但没有结果。我是Piglatin的新手。
我有一种情况,我必须从csv文件中过滤数据。
CSV位于hdfs上,具有两列。

grunt>> fl = load '/user/hduser/file.csv' USING PigStorage(',') AS (conv:chararray, clnt:chararray);
grunt>> dump f1;
("first~584544fddf~dssfdf","2001")
("first~4332990~fgdfs4s","2001")
("second~232434334~fgvfd4","1000")
("second~786765~dgbhgdf","1000)
("second~345643~gfdgd43","1000")

我需要做的是仅提取第一个“〜”符号之前的第一个单词,并将其与csv文件的第二个列值合并。我还需要对返回的串联结果进行分组,并计算此类相似行的数量,并创建一个新的csv文件作为输出,其中将再次有2列。第一列将是连接值,第二列将是行数。

("first 2001","2")
("second 1000","3")

等等。

我已经在这里编写了代码,但无法正常工作。我用过STRSPLIT。它正在分割输入csv文件的第一列的值。但我不知道如何提取第一个分割值。
代码如下:
convData = LOAD '/user/hduser/file.csv' USING PigStorage(',') AS (conv:chararray, clnt:chararray);

fil = FILTER convData BY conv != '"-1"'; --im using this to filter out the rows that has 1st column as "-1".

data = FOREACH fil GENERATE STRSPLIT($0, '~');

X = FOREACH data GENERATE CONCAT(data.$0,' ',convData.clnt);

Y = FOREACH X GROUP BY X;

Z = FOREACH Y GENERATE COUNT(Y);

var = FOREACH Z GENERATE CONCAT(Y,',',Z);

STORE var INTO '/user/hduser/output.csv' USING PigStorage(',');

最佳答案

STRSPLIT返回一个元组,您可以使用编号的语法访问其中的各个元素。这是您需要的:

data = FOREACH fil GENERATE STRSPLIT($0, '~') AS a, clnt;
X = FOREACH data GENERATE CONCAT(a.$0,' ', clnt);

关于hadoop - pig 拉丁问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15816507/

相关文章:

hadoop - 每周在 hadoop 上运行 pig 脚本

hadoop - 了解作业 conf.xml 参数 pig.script.features

hadoop - Cloudera 安装错误 我想知道我们可以在 ubuntu 上为 Hadoop 单节点集群提供 cloudera 管理器吗?

linux - Hadoop 显示的 map 输入记录数与目录中所有文件中的行数不同

hadoop - Editlog和fsimage

hadoop - map 缩小输出未生成

python - 使用pydoop将文件复制到hdfs

hadoop - 作业conf.xml参数pig.mapPlan