使用列值从Apache pig获取其他数据集(数据转置的类型)中的数据

时间:2016-04-26 09:45:35

标签: hadoop apache-pig

我有两个数据集,一个是源数据,另一个是元数据。

source data
============

name city state country
Ram  Agra     UP   India 
John Aligarh  UP   India
Shyam Merrut   UP   India
Isha Kanpur   UP   India

Metadata
=========

column_input   flag
name          Y
city          Y
state         N
country       N



FINAL OUTPUT
============
name city 
Ram  Agra      
John Aligarh  
Shyam Merrut   
Isha Kanpur

我们根据元信息从源代码中需要很少的列,我们需要首先引用/读取元数据数据集,逻辑标志应该是'Y',这里是'city'和'state'所以我们只需要拉这些来自源数据的两列。

我能够从元数据数据集中获取列名,现在我可以将此列名传递给源以获取相应的列数据。

当前代码

meta_data_read = LOAD  '/user/aidb'  USING PigStorage(',') AS (column_input,flag);

filter_flag  = FILTER meta_data_read by LOWER(TRIM(Flag)) == 'y' ;

gen_required_col = FOREACH filter_flag  GENERATE column_input;

dump gen_required_col ;

(city)
(state)

1 个答案:

答案 0 :(得分:0)

如果必须针对同一元数据处理所有数据行,我将创建一个小(shell)脚本,处理元文件并以逗号分隔回复字段名称。然后将其存储在pig变量中并使用该变量来投影所需的字段。 这是一个例子(注意:我没有创建刚刚声明PROJECT变量的shell脚本,但脚本很简单)

set pig.pretty.print.schema true;

%default PROJECT 'a,c'

data = LOAD 'SO/simple.txt' USING PigStorage(',') AS (a:chararray, b:chararray, c:chararray, d:chararray);
DESCRIBE data;
dump data;
data_p = FOREACH data GENERATE
        $PROJECT;
DESCRIBE data_p;
DUMP data_p;

因此PROJECT变量包含需要投影的字段,只需在FOREACH语句中使用它。 描述结果如下:

data: {
    a: chararray,
    b: chararray,
    c: chararray,
    d: chararray
}

data_p: {
    a: chararray,
    c: chararray
}

我希望这能解决你的问题。