我有格式为test_YYYYMM.txt的文件。我使用'-tagFile'和SUBSTRING()来提取我的猪脚本中使用的年份和月份。
文件名在元组开头添加为伪列。
在我做DUMP之前,我想删除该列。做一个FOREACH ... GENERATE只有我需要的列不起作用,它仍然保留了psuedo-column。
有没有办法删除此列?
我的示例脚本如下
raw_data = LOAD 'test_201501.txt' using PigStorage('|', '-tagFile') as
col1: chararray, col2: chararray;
data_with_yearmonth = FOREACH raw_data GENERATE
SUBSTRING($0,5,11) as yearmonth,
'TEST_DATA' as test,
col1,
col2;
DUMP data_with_yearmonth;
预期产出: 201501,TEST_DATA,col1,col2
电流输出: 201501,TEST_DATA,test_YYYYMM.txt,col1,col2
答案 0 :(得分:2)
首先,如果col1和col2是字符串,那么你应该在Pig中将它们声明为CHARARRAY。 另外,我猜你当前的输出实际上是:201501,TEST_DATA,test_YYYYMM.txt,col1。 告诉我,如果我错了,但正如你使用过的那样--TagFile'第一列是文件标题,这就是您在SUBSTRING中使用$ 0访问它的原因。
您可以尝试使用以下代码:
raw_data = LOAD 'text_201505.txt'
USING PigStorage('|', '-tagFile')
AS (title: CHARARRAY, col1: CHARARRAY, col2: CHARARRAY);
data_with_yearmonth = FOREACH raw_data
GENERATE
SUBSTRING($0,5,11) AS yearmonth,
'TEST_DATA' AS test,
col1,
col2;
DUMP data_with_yearmonth;