hadoop - 使用 cassandra 和 pig 进行数据清理

标签 hadoop cassandra apache-pig datastax-enterprise

我有两组数据想在 Pig 中进行比较。两者具有相同的唯一 ID,但第二组数据中的名称随机更改。逻辑如下:

  • 加载empl1原始数据
  • 加载empl2原始数据
  • 选择“名称不相同”且“emplno 相等”的行

我做了:

A1=  LOAD 'cassandra://employees_pig1/employees_cf' USING CassandraStorage() AS (key, columns: bag {T: tuple(name, value)});

B1=  LOAD 'cassandra://employees_pig2/employees_cf' USING CassandraStorage() AS (key, columns: bag {T: tuple(name, value)});

A2 = FOREACH A1 GENERATE key, FLATTEN(columns);

B2 = FOREACH B1 GENERATE key as key2, FLATTEN(columns);

嘿,不能在论坛上发图片。这是说明 A2,B2 的链接 https://picasaweb.google.com/lh/photo/SU3QgKsbA4nmq83cdnhiVdMTjNZETYmyPJy0liipFm0?feat=directlink

现在需要一些帮助,我是否正确地处理了这个问题?

C1 = join A2 by key, B2 by key2;

D1= filter C1 by A2.key==B2.key2 -- cannot do a A2.first_name!=B2.first_name;

想要选择“名称不相同”和“emplno 相等”的行,但不完全确定如何操作。请告知。

谢谢你

更新: - 而不是加入我做了一个合作组 C3= COGROUP A2 by key, B2 by key2;

https://picasaweb.google.com/lh/photo/_lkEqW4BvIgbnZSHKDCJGNMTjNZETYmyPJy0liipFm0?feat=directlink

下一步,我正在考虑做

D1= FOREACH C3 GENERATE group, A2.first_name as fn1, B2.first_name as fn2

该组返回所需的结果(即 empno),但 'A2.first_name, B2.first_name' 不正确。需要知道如何访问 A2 和 B2 包/元组中的数据。

然后我将能够执行 FILTER BY fn1==fn2。

最佳答案

通过执行 JOIN(至少是内部联接,这是您在上面所做的),您已经注意确保 emplno 来自 AB 是相等的。然后,您所要做的就是根据 name 是否相同进行过滤。

C1 = join A2 by key, B2 by key;
D1 = filter C1 by A2::name != B2::name;

关于hadoop - 使用 cassandra 和 pig 进行数据清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13604024/

相关文章:

hadoop - 以下字段 : 'totalSize' and 'rawDataSize' mean in DESCRIBE EXTENDED query output in hive? 是什么意思

java - Hadoop WordCount 组合器

hadoop - cassandra 需要 javax.jdo.option.ConnectionURL

linux - 无法运行存在的文件

java - 使用 Hadoop Map-Reduce 去除不可打印的字符

mysql - 启动 Hive 时出现 SSL 错误。它正在工作,但在我解决错误之前我无法执行分桶

hadoop - S3 Flume HDFS SINK 压缩

shell - 在 pig 中执行本地 shell 脚本命令

node.js - Cassandra 行缓存与 Redis 缓存

java - 使用 java 驱动程序跟踪 Cassandra 查询时出现空指针错误