2017-09-15 10 views
0

以下は私の豚スクリプトです。非常に簡単です。一部のデータをロードしています。列によるデータのフィルタリング。データ型を使用してスキーマを生成する。ハイブテーブルにデータを格納する。 私はそのはTypeCast豚スクリプト実行中の例外

2017-09-15 11:21:04,523 [Thread-12] WARN org.apache.hadoop.mapred.LocalJobRunner - job_local1554819907_0001 
java.lang.Exception: java.io.IOException: java.lang.ClassCastException: org.apache.pig.data.DataByteArray cannot be cast to java.lang.Integer 
    at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462) 
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:522) 
Caused by: java.io.IOException: java.lang.ClassCastException: org.apache.pig.data.DataByteArray cannot be cast to java.lang.Integer 
    at org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.StoreFuncDecorator.putNext(StoreFuncDecorator.java:83) 
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigOutputFormat$PigRecordWriter.write(PigOutputFormat.java:144) 
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigOutputFormat$PigRecordWriter.write(PigOutputFormat.java:97) 
    at org.apache.hadoop.mapred.MapTask$NewDirectOutputCollector.write(MapTask.java:658) 
    at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:89) 
    at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.write(WrappedMapper.java:112) 
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigMapOnly$Map.collect(PigMapOnly.java:48) 
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.runPipeline(PigGenericMapBase.java:282) 
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.map(PigGenericMapBase.java:275) 
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.map(PigGenericMapBase.java:65) 
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146) 
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341) 
    at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 

以下のエラーを投げて、データを実行していた場合、そのは

emp = load '/root/emp.nulls' using PigStorage(','); 
filt = filter emp by $2 is not null; 
f = foreach filt generate $0 as id:int, $1 as bdate:chararray, $2 as fname:chararray, $3 as lname:chararray, $4 as gender:chararray, $5 as hdate:chararray; 
store f into 'emp_null' using org.apache.hive.hcatalog.pig.HCatStorer(); 

を投げて、データを実行しています誰かが私を助けることができますか?

EDIT: 自分自身をロードするときにスキーマを生成すると、正常に動作します。

答えて

0

$0 as id:intを使用すると、フィールドをキャストしませんが、新しいフィールドを使用して$ 0に値を格納します。これを行う正しい方法は、フィールドの前にデータ型を接頭辞として付けることです。新しいバージョンのPigで修正されました。ここでは、修正するためにissueが議論されています。

f = foreach filt generate (int)$0 as id, 
          (chararray)$1 as bdate, 
          (chararray)$2 as fname, 
          (chararray)$3 as lname, 
          (chararray)$4 as gender, 
          (chararray)$5 as hdate; 
関連する問題