Pig 读取数据作为 databytearray
Posted
技术标签:
【中文标题】Pig 读取数据作为 databytearray【英文标题】:Pig reading data as databytearray 【发布时间】:2015-02-23 11:15:22 【问题描述】:大家好,我还有一个问题,我只是无法理解猪的行为
我正在将数据加载到 pig 中,并在经过一些转换后使用 hdfs(/user/sga/transformeddata) 上的 PigStorage() 将其存储。
但是当我从 /user/sga/transformeddata 位置加载数据并执行时
temp = load '/user/sga/transformeddata' using PigStorage();
gen = foreach temp generate page_type;
dump gen;
出现以下错误:
databytearray 不能转换为 java.lang.String
但如果我这样做了
gen = foreach temp generate *;
dump gen;
效果很好
非常感谢任何帮助理解这一点。
根据需要提供代码:
STORE union_of_all_records INTO '/staged/google/data_after_denormalization' using PigStorage('\t','-schema');
union_of_all_records
是 pig 中的别名。
现在另一个脚本将使用这些数据
lookup_data =
LOAD '/staged/google/page_type_map_file/' using PigStorage() AS (page_type:chararray,page_type_classification:chararray);
load_denorm_clickstream_record =
LOAD '/staged/google/data_after_denormalization' using PigStorage('\t','-schema');
并加入这两个别名
denorm_clickstream_record = LIMIT load_denorm_clickstream_record 100;
join_with_lookup =
JOIN denorm_clickstream_record BY page_type LEFT OUTER, lookup_data BY page_type;
step x : final_output =
FOREACH join_with_lookup
GENERATE denorm_clickstream_record::page_type as page_type;
在第 x 步我得到了上述错误。
【问题讨论】:
【参考方案1】:我认为你必须选择:
1) 您必须告诉 Pig 数据具有的架构。例如:
temp = load '/user/sga/transformeddata' using PigStorage() AS (page_type:chararray);
2) 当你第一次存储数据时,告诉 Pigstorage 也存储模式信息。 PigStorage('\t', '-schema');
当您像上面那样加载数据时,PigStorage
应该从架构信息中读取架构。
【讨论】:
我在存储我提供的架构的数据时也做了同样的事情。 PigStorage 对存储的数据一无所知,除非您告诉它以上是关于Pig 读取数据作为 databytearray的主要内容,如果未能解决你的问题,请参考以下文章