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的主要内容,如果未能解决你的问题,请参考以下文章

Pig的Python UDF:数据类型转换错误

猪铸造/数据类型

Pig:读取多个文件并逐列追加

一种从Mysql读取表数据到Pig的方法

Pig 使用自定义行/记录分隔符存储文件

使用 pig 从 csv 文件中读取数据