PIG - 从平面文件创建一个元组行

时间:2016-04-27 22:07:57

标签: tuples apache-pig

我正在尝试在Pig中创建一个元组,但文件格式不太友好:

File Format:
Name: Zach
LastName: Red
Address: 34 Store Av 
Age: 34
Name: Brian
LastName: Curts
Address: 123 Street Av 
Age: 23

我需要创建一个元组:

Name: Zach LastName: Red Address: 34 Store Av Age: 34
Name: Brian LastName: Curts Address: 123 Street Av Age: 23

2 个答案:

答案 0 :(得分:1)

您可以使用Java / Python / ...编写自己的UDF来加载此数据。检查文档: http://pig.apache.org/docs/r0.15.0/udf.html#load-store-functions

答案 1 :(得分:0)

疯狂的想法,但它可能会奏效;我假设所有元素都有4行。否则 - 它将无效。

  1. 使用PigStorage加载文件
  2. 使用RANK运算符为每一行生成RANK字段。第一行将获得1,第二行将获得2,​​等等。
  3. 对于每一行,在1-4之间生成另一​​个数字,基于其类型:1表示名称,2表示LastName,3表示地址,4表示年龄。我们称之为'RecordType'
  4. 添加另一个将是FLOOR((RANK-1)/ 4)的字段。将其命名为'PersonID'。第一人称为0,第二人为1,等等。
  5. 现在,您可以按PersonID进行分组,以便同时获取同一个人的所有记录。
  6. 现在,对于每个人,您将获得PersonID,以及包含所有记录的包。我们需要对它们进行排序。为此,您可以使用

    output = foreach Person {     sorted = order RecordRows by RecordType;     生成PersonID,已排序; }

  7. 使用BagToTuple功能将行囊展平成元组

  8. 你已经完成了。