hadoop—使用列值从使用ApachePig的其他数据集(某种数据转置)获取数据

zdwk9cvp  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(261)

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

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

基于元信息,我们需要从源代码中获取几个列,我们需要首先引用/读取元数据数据集,logic-flag应该是“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)
cnh2zyt3

cnh2zyt31#

如果所有数据行都必须针对同一个meta进行处理,我将创建一个小的(shell)脚本来处理meta文件并响应以逗号分隔的文件名。然后将其存储在pig变量中,并使用该变量投影所需的字段。下面是一个示例(注意:我没有创建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
}

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

相关问题