Hadoop 猪:地图边连接是如何工作的?

Hadoop 猪:地图边连接是如何工作的?,hadoop,join,mapreduce,apache-pig,cloudera,Hadoop,Join,Mapreduce,Apache Pig,Cloudera,在MapReduce中,地图侧连接的要求如下: 数据应该以特定的方式进行分区和排序 每个输入数据应划分在相同数量的分区中 必须使用相同的键进行排序 特定密钥的所有记录必须位于同一分区中 我有一个简单的猪脚本: A = LOAD '/input_01/*.parquet' using parquet.pig.ParquetLoader(); B = LOAD '/input_02/*.parquet' using parquet.pig.ParquetLoader(); C =

在MapReduce中,地图侧连接的要求如下:

  • 数据应该以特定的方式进行分区和排序
  • 每个输入数据应划分在相同数量的分区中
  • 必须使用相同的键进行排序
  • 特定密钥的所有记录必须位于同一分区中
我有一个简单的猪脚本:

 A = LOAD '/input_01/*.parquet' using parquet.pig.ParquetLoader();   
 B = LOAD '/input_02/*.parquet' using parquet.pig.ParquetLoader();

 C = JOIN A BY id, B BY id;

 STORE C into '/output' using parquet.pig.ParquetStorer();
运行此脚本后,控制台输出告诉我,这样的内部联接会导致映射端哈希联接

然而,据我所知,我的输入数据集不是按特定键排序的,我也不知道分区


在这种情况下,PIG如何成功地进行地图侧连接?谢谢

你们能复制并粘贴控制台上写的东西吗?我不认为猪写的是用过的连接类型!我最近注意到,使用合并联接对一个脚本的运行时没有显著影响。因此,我怀疑pig本身有时能够优化“引擎盖下”的简单连接。(当然,这只是一种怀疑。)