使用模式加载数据时出现 Apache Pig ClassCast 异常

Posted

技术标签:

【中文标题】使用模式加载数据时出现 Apache Pig ClassCast 异常【英文标题】:Apache Pig ClassCast exception when loading data with schema 【发布时间】:2015-01-01 00:01:43 【问题描述】:

我有一个简单的制表符分隔文件,其中包含一个猪模式,我正在尝试加载并添加两列。当我使用 PigStorage 的“--schema”选项加载时,添加失败并出现 ClassCastException。当我使用“--noschema”加载时,添加工作正常。为什么 Pig 在前一种情况下会失败并出现异常?

这里是示例文件,只有 1 行输入,带有制表符分隔值:

a       1       1

架构“.pig_schema”如下所示:

"fields":["name":"str","type":55,"description":"autogenerated from Pig Field Schema","schema":null,"name":"score","type":15,"description":"autogenerated from Pig Field Schema","schema":null,"name":"count","type":15,"description":"autogenerated from Pig Field Schema","schema":null],"version":0,"sortKeys":[],"sortKeyOrders":[]

这里是来自 grunt shell 的语句列表:

a1 = load '/local/workplace/data' using PigStorage(); --load with schema
describe a1; -- a1: str: chararray,score: long,count: long
b1 = foreach a1 generate score + count;
dump b1; -- throws exception
a2 = load '/local/workplace/data' using PigStorage('\t', '--noschema') as (str:chararray, score:long, count: long);
b2 = foreach a2 generate score+count; -- no exception
dump b2; -- works fine

抛出的异常是:

org.apache.pig.backend.executionengine.ExecException: ERROR 0: Exception while execution [Add (Name: Add[long] - scope-34 Operator Key: scope-34) chi
ldren: [[POProject (Name: Project[long][0] - scope-32 Operator Key: scope-32) children: null at []], [POProject (Name: Project[long][1] - scope-33操作
erator Key: scope-33) children: null at []]] at []]: java.lang.ClassCastException: org.apache.pig.data.DataByteArray 无法转换为 java.lang.Numb
呃
        在 org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator.getNext(PhysicalOperator.java:338)
        在 org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POForEach.processPlan(POForEach.java:378)
        在 org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POForEach.getNextTuple(POForEach.java:298)
        在 org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.runPipeline(PigGenericMapBase.java:282)
        在 org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.map(PigGenericMapBase.java:277)
        在 org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.map(PigGenericMapBase.java:64)
        在 org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
        在 org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:763)
        在 org.apache.hadoop.mapred.MapTask.run(MapTask.java:369)
        在 org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:210)
引起:java.lang.ClassCastException:org.apache.pig.data.DataByteArray 不能转换为 java.lang.Number
        在 org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.Add.genericGetNext(Add.java:100)
        在 org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.Add.getNextLong(Add.java:123)
        在 org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator.getNext(PhysicalOperator.java:323)

猪版本:0.12.1

【问题讨论】:

是的,你是对的,它看起来像是 0.12 中的一些问题。相同的命令在 0.13 版本中运行良好。 【参考方案1】:

默认情况下,如果您提供模式,则所有内容都被视为字节数组。

【讨论】:

以上是关于使用模式加载数据时出现 Apache Pig ClassCast 异常的主要内容,如果未能解决你的问题,请参考以下文章

使用冒号加载标签时出现 Pig xmlloader 错误

在 pig 中使用 UDF 时出现错误 1070

在 PIG 中执行命令时出现警告

使用 Apache Pig 将数据加载到 Hbase 表时,如何排除 csv 或文本文件中没有数据(只有空格)的列?

尝试使用 apache spark 加载模块时出现 Databricks 错误 [重复]

运行 Pig 脚本时出现异常