类型转换的问题 - Pig -> HCatalog
Posted
技术标签:
【中文标题】类型转换的问题 - Pig -> HCatalog【英文标题】:Problems with type conversion - Pig -> HCatalog 【发布时间】:2013-11-26 12:30:21 【问题描述】:我正在尝试从 HCatalog 加载表,对数据进行一些练习并将其存储到另一个表中。
源表:stage.iboa_event_definitions
inno_description string
inno_id double
inno_name string
inno_url string
inno_valid_from string
inno_valid_to string
目标表:
create table dictionary (id int,src_id double,source_code string, src_code string, src_description string, group_code string);
我的脚本:
iboa_event_definitions = LOAD 'stage.iboa_event_definitions' USING org.apache.hcatalog.pig.HCatLoader();
iboa_event_definitions_filter = foreach iboa_event_definitions generate inno_id as src_id, 'IBOA' as source_code, inno_name as src_code, inno_description as src_description, '' as group_code;
iboa_event_definitions_filter_id = RANK iboa_event_definitions_filter;
final_table = foreach iboa_event_definitions_filter_id generate rank_iboa_event_definitions_filter as id:int, src_id, source_code as source_code, src_code,
src_description, group_code;
store final_table into 'dictionary' using org.apache.hcatalog.pig.HCatStorer();
我得到错误:
2013-11-26 13:18:06,140 [主要] 信息 org.apache.pig.tools.pigstats.ScriptState - Pig 中使用的功能 脚本:RANK 2013-11-26 13:18:06,143 [主要] 信息 org.apache.pig.newplan.logical.rules.ColumnPruneVisitor - 列 为 iboa_event_definitions 修剪:$3、$4、$5 2013-11-26 13:18:06,212 [主要] 错误 org.apache.pig.tools.grunt.Grunt - 错误 1115: 不支持的类型:Pig 架构中的 10 日志文件中的详细信息:/export/home/pig/pig_1385463241554.log
为什么? 让我们检查一下字段类型。
describe iboa_event_definitions_filter_id;
iboa_event_definitions_filter_id: rank_iboa_event_definitions_filter: long,src_id: double,source_code: chararray,src_code: chararray,src_description: chararray,group_code: chararray
describe final_table;
final_table: id: int,src_id: double,source_code: chararray,src_code: chararray,src_description: chararray,group_code: chararray
可能错误是由 Long 类型引起的?但这就是我尝试将其转换为 int 的原因。
谁能帮我解决这个问题?
谢谢
帕维尔
【问题讨论】:
我的建议是尝试删除大多数列以找到错误的列。您也可以尝试检查 docs/source 以在“Unsupported type: 10 in Pig's schema”中找到“10”的含义 我知道问题出在哪一列 -> 由 RANK 操作创建的列:rank_iboa_event_definitions_filter。 更正:kwot -> 知道 遇到同样的问题,你解决了吗? 【参考方案1】:你的错误信息的关键部分是:
Unsupported type: 10 in Pig's schema
当我有一个 INT
并尝试将其存储在一个表中,其中对应的列是 BIGINT
时,这发生在我身上。
我的解决方案是更改表(而不是 Pig 脚本),之后商店运行良好。
【讨论】:
【参考方案2】:Type 10 代表整数(请参阅http://pig.apache.org/docs/r0.11.1/api/constant-values.html#org.apache.pig.data.DataType.INTEGER)。 您的 pig 版本不支持写入 INT 列。
使用 BIGINT 作为解决方法。
【讨论】:
【参考方案3】:当我尝试在对应列为 BIGINT 的表中存储一个 int 值 [在转换为 int 之后] 时,我也遇到了这个问题。
蜂巢
INT/INTEGER(4 字节有符号整数) BIGINT(8字节有符号整数)
在Pig中对应
int 有符号 32 位整数
长有符号 64 位整数
所以我将我的价值设置为 long,它解决了我的问题。
【讨论】:
以上是关于类型转换的问题 - Pig -> HCatalog的主要内容,如果未能解决你的问题,请参考以下文章