Pig 学习之 Join 、Group、sort、Union
来源:互联网 发布:excel两张表数据匹配 编辑:程序博客网 时间:2024/06/05 08:55
join
A:
(2,Tie)(4,Coat)(3,Hat)(1,Scarf)
B:
(Joe,2)(Hank,4)(Ali,0)(Eve,3)(Hank,2)
inner join
A = LOAD ‘A’;B = LOAD ‘B’;C = JOIN A BY $0, B BY $1;DUMP C;
output:
(2,Tie,Hank,2)(2,Tie,Joe,2)(3,Hat,Eve,3)(4,Coat,Hank,4)
如果要进行的连接的关系太大,不能全部放到内存当中,则应该使用通用的连接操作。如果有一个关系小到能够全部放在内存中,则可以使用一种特殊的连接操作,即 fragment replicate join,它把小的输入关系发送到所有的mapper,并在map端使用内存查找表对(分段的)较大的关系进行连接。
命令:
C = JOIN A BY $0, B BY $1 USING 'replicated';
注意: 第一个必须是大的数据集,后面则是一个或者多个相对较小的(能够全部放在内存中)。
outer join
C = JOIN A BY $0 LEFT OUTER, B BY $1;
COGROUP
D = COGROUP A BY $0, B BY $1;
output:
(0,{},{(Ali,0)})(1,{(1,Scarf)},{})(2,{(2,Tie)},{(Hank,2),(Joe,2)})(3,{(3,Hat)},{(Eve,3)})(4,{(4,Coat)},{(Hank,4)})
COGROUP 和join 操作类似,不同点在于,COGROUP会创建一组嵌套的输出元组集合。如上。
COGROUP 为每个不同的分组键值生成一个元组。每个元组的第一个字段就是那个键值。其他字段是各个关系中匹配该键值的元组所组成的 bag。第一个bag中包含A中有该键值的匹配元组,第二个bag同理。
如果某个键值在一个关系中没有匹配的元组,那么对应于这个关系的bag就未空。
COGROUP的默认类型outer连接。可以使用关键词OUTER来显式指明使用 outer连接,产生的结果相同。
D = COGROUP A BY $0, B BY $1 OUTER;
也可以使用INNER 关键字让COGROUP 使用内连接语义
D = COGROUP A BY $0 INNER, B BY $1;
output:
(1,{(1,Scarf)},{})(2,{(2,Tie)},{(Hank,2),(Joe,2)})(3,{(3,Hat)},{(Eve,3)})(4,{(4,Coat)},{(Hank,4)})
扁平化输出结果:
F = FOREACH D GENERATE FLATTEN(A), B.$0;
输出:
(1,Scarf,{})(2,Tie,{(Hank),(Joe)})(3,Hat,{(Eve)})(4,Coat,{(Hank)})
让所有输出结果都扁平化
G = COGROUP A BY $0 INNER, B BY $1 INNER;H = FOREACH G GENERATE FLATTEN($1),FLATTEN($2);
输出:
(2,Tie,Hank,2)(2,Tie,Joe,2)(3,Hat,Eve,3)(4,Coat,Hank,4)
这和上面的join 结果是一样的。
CROSS
CROSS 笛卡尔积。会将第一个关系中的每个元组和第二中的所有元组进行连接。这个操作的输出结果的大小是输入关系的大小的乘积。
I = CROSS A, B;
输出:
(1,Scarf,Hank,2)(1,Scarf,Eve,3)(1,Scarf,Ali,0)(1,Scarf,Hank,4)(1,Scarf,Joe,2)(3,Hat,Hank,2)(3,Hat,Eve,3)(3,Hat,Ali,0)(3,Hat,Hank,4)(3,Hat,Joe,2)(4,Coat,Hank,2)(4,Coat,Eve,3)(4,Coat,Ali,0)(4,Coat,Hank,4)(4,Coat,Joe,2)(2,Tie,Hank,2)(2,Tie,Eve,3)(2,Tie,Ali,0)(2,Tie,Hank,4)(2,Tie,Joe,2)
GROUP
GROUP语句是对已个数据集中的数据进行分组。GROUP支持对键值进行分组,还可以使用表达式或者用户自定义函数作为分组键。
数据集A:
(Joe,cherry)(Ali,apple)(Joe,banana)(Eve,apple)
根据第二个字符个数进行分组:
B = GROUP A BY SIZE($1);DUMP B;
output:
(5,{(Eve,apple),(Ali,apple)})(6,{(Joe,banana),(Joe,cherry)})
sort
数据集:
(2,3)(1,2)(2,4)
使用ORDER关键字 自定按照某个或者某几个字段对数据进行排序。默认的排序方式是对具有相同类型的字段值使用自然序排序。
B = ORDER A BY $0, $1 DESC;
输出:
(1,2)(2,4)(2,3)
但是,对于排序后的结果集的后续处理,并不能保证一定按照排序的结果输出,所以通常只在获取结果前一步才使用ORDER排序。
LIMIT 就像sql中的limit一样,限制结果大小,快速获取结果。
D = LIMIT B 2;DUMP D;(1,2)(2,4)
UNION
DUMP A;(2,3)(1,2)(2,4)DUMP B;(z,x,8)(w,y,1)C = UNION A, B;DUMP C;(2,3)(z,x,8)(1,2)(w,y,1)(2,4)
如上示例,可以对两个数据集不同或者字段数不同的数据集进行UNION操作。
SPLIT 操作是UNION操作的相反操作。
- Pig 学习之 Join 、Group、sort、Union
- join & union & group by
- Group by, UNION and JOIN,Full JOIN,RIGHT JOIN,LEFT JOIN,INNER JOIN的机制
- pig语法学习 FOREACH GENERATE group AS
- pig语法学习 FOREACH GENERATE group AS
- pig语法学习 FOREACH GENERATE group AS
- inner join,left join,union学习
- Hadoop学习之Pig
- Pig学习之 UDF
- 数据库查询常用关键字JOIN与LEFT JOIN/UNION与UNION ALL/GROUP BY
- LINQ学习笔记:Join和Group Join
- Linq 学习(6) Group & Join
- MapReduce之join和sort
- sql之left join、right join、inner join的区别 union和union all
- UNION join
- union & join
- union & join
- union+join
- java JTable 列自适应大小(平均分配)
- 商品信息系统改名称
- 深度优先搜索2-Shredding Company(算法基础 第7周)
- C++ 多态 polymorphic 运行时期多态
- JavaScript ES6新的类继承特性学习笔记
- Pig 学习之 Join 、Group、sort、Union
- 4-4认识<img>标签,为网页插入图片
- Android中Services之异步IntentService
- Hadoop中Partition解析 和 storm的grouping
- Android系统系统升级过程分析之------update.zip包的制作
- 《Java集合》学习笔记
- 数据库插入的小问题(自我总结)
- 使用表单标签,与用户交互
- 测试 PIC16F877A 《==》 MAX6902