我是新来的猪。我想做一个合并连接。满足以下要求:
示例文件:数据必须在两个连接键上按升序(ASC)排序。
4, The Object of Beauty, 1991,2.8,6150
1, The Nightmare Before Christmas, 1993,3.9,4568
2, The Mummy, 1932,3.5,4388
3, Orphans of the Storm, 1921,3.2,9062
3, Orphans of the Storm, 1921,3.2,9062
4, The Object of Beauty, 1991,2.8,6150
5, Night Tide, 1963,2.8,5126
6, One Magic Christmas, 1985,3.8,5333
7, Muriel's Wedding, 1994,3.5,6323
8, Mother's Boys, 1994,3.4,5733
9, Nosferatu: Original Version, 1929,3.5,5651
10, Nick of Time, 1995,3.4,5333
我在PIG中执行了以下命令:
movies = LOAD 'Sample.csv' using PigStorage (',') as (id: int, name, year, rating, duration);
movies_sorted movies = order by id ASC PARALLEL 3;
movies_sorted store into 'output_movies';
当我执行
hadoop fs-cat ./output2/part-r-00000
我看到,在不同的分区中有具有相同键的记录。例如,我在两个不同的分区中有一个id为3的记录。据我所知,具有相同键的记录应该始终位于同一分区中。F
怎么了?
在少数情况下,包括ORDER BY
和倾斜的JOIN
, Pig将打破将给定键的所有记录仅发送给一个reducer的map-reduce约定。(请注意,排序的概念已经超出了map-reduce范式。)但是,您仍然可以保证,如果按顺序遍历reducer的输出(如part-r-NNNNN
中的数字所示),则记录将按指定的顺序排列。