为Pig中的每个组使用多重存储

时间:2016-05-20 15:44:13

标签: nested apache-pig

我正在尝试将数据分组并在hdfs中存储每个'名称的文件夹。以及每个“年份”的子文件夹和#39;在每个名称文件夹下。

输入:

(Date)        (name)         (col3)     (col4)

2015-02-02    abc              y          z

2016-01-02    xyz              i          j

2015-03-02    abc              f          b

2015-02-06    abc              y          z

2016-03-02    xyz              a          q

预计在hdfs:

abc 文件夹

->201502 subfolder

       2015-02-02    abc              y          z

       2015-02-06    abc              y          z

->201503 subfolder

       2015-03-02    abc              f           b

xyz 文件夹

->201601 subfolder

      2016-01-02    xyz              i            j

->201603 subfolder

      2016-03-02    xyz              a          q

在按日期对元组进行分组后,我不确定如何在Name列上使用Multistorage选项。

2 个答案:

答案 0 :(得分:0)

首先通过名称过滤创建两个关系

您可以使用子字符串为DATE子文件夹

创建新字段
CONCAT(SUBSTRING($0,0,4),SUBSTRING($0,5,7)

现在使用此字段作为MultiStorage中的文件夹名称

答案 1 :(得分:0)

如果您有HCatalog,可以按照以下步骤操作:

  1. 使用HCatalog

    创建如下分区表

    hcat -e&#34;创建外部表TABLE_NAME(col3字符串,col4字符串)分区(日期字符串,名称字符串)location&#39; / user / $ USER / multi_partition&#39;&#34; < / p>

  2. 使用以下pig语句将数据加载到该表:

    A = LOAD&#39; Input.dat&#39;使用PigStorage()作为(日期:chararray,名称:chararray,col3:chararray,col4:chararray);

    存储INTO&#39; TABLE_NAME&#39;使用org.apache.hive.hcatalog.pig.HCatStorer();