使用 Apache pig 使用列值从其他数据集(数据转置排序)中获取数据
Use column values to fetch data from other dataset (sort of data transpose ) using 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
我们需要基于元信息的源中的几列,我们首先需要 refer/read 元数据数据集,逻辑标志应该 '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)
如果所有数据行都必须针对同一个元进行处理,我会创建一个小的 (shell) 脚本来处理元文件并响应以逗号分隔的文件名。比将它存储在猪变量中并使用该变量来投影所需的字段。
这是一个示例(注意:我没有创建 shell 脚本,只是声明了 PROJECT 变量,但脚本很简单)
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
}
希望这能解决您的问题。
我有两个数据集,一个是源数据,另一个是元数据。
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
我们需要基于元信息的源中的几列,我们首先需要 refer/read 元数据数据集,逻辑标志应该 '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)
如果所有数据行都必须针对同一个元进行处理,我会创建一个小的 (shell) 脚本来处理元文件并响应以逗号分隔的文件名。比将它存储在猪变量中并使用该变量来投影所需的字段。 这是一个示例(注意:我没有创建 shell 脚本,只是声明了 PROJECT 变量,但脚本很简单)
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
}
希望这能解决您的问题。