2014-10-15 3 views
0

매우 이상한 문제가 있습니다. 돼지를 사용하여 여러 열 데이터 처리가 있습니다. 돼지는 돼지 스크립트에서 데이터를로드하기 위해 HCatalogLoader를 사용합니다. 열은 여러 정수 데이터, 문자열 데이터 및 이중 데이터를 포함합니다. 정수 유형 인 열 (예 : C1) 중 하나가 ParquetStorer을 사용하여 저장하는 데 실패했습니다. 다른 정수 열은 문제가 없으며 C1 열 저장소 만 실패합니다. 이하 ParquetStorer를 사용하여 정수 데이터를 저장할 수 없습니다.

오류이다

Backend error message 
--------------------- 
AttemptID:attempt_1413268228935_0073_m_000002_0 Info:Container killed by the ApplicationMaster. 
Container killed on request. Exit code is 143 
Container exited with a non-zero exit code 143 

Backend error message 
--------------------- 
AttemptID:attempt_1413268228935_0073_m_000001_0 Info:Error: parquet.io.ParquetEncodingException: can not write value at 2 in tuple (,2003-11-22,840,00007,ABC,DEF,FFGG,10,0.0,0,0.0,11.11,0,7.122112,0.0,0,0.0) from type 'C1: int' to type 'optional int32 C1' 
     at parquet.pig.TupleWriteSupport.writeValue(TupleWriteSupport.java:199) 
     at parquet.pig.TupleWriteSupport.writeTuple(TupleWriteSupport.java:151) 
     at parquet.pig.TupleWriteSupport.write(TupleWriteSupport.java:90) 
     at parquet.pig.TupleWriteSupport.write(TupleWriteSupport.java:46) 
     at parquet.hadoop.InternalParquetRecordWriter.write(InternalParquetRecordWriter.java:111) 
     at parquet.hadoop.ParquetRecordWriter.write(ParquetRecordWriter.java:78) 
     at parquet.hadoop.ParquetRecordWriter.write(ParquetRecordWriter.java:35) 
     at parquet.pig.ParquetStorer.putNext(ParquetStorer.java:121) 
     at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigOutputFormat$PigRecordWriter.write(PigOutputFormat.java:139) 
     at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigOutputFormat$PigRecordWriter.write(PigOutputFormat.java:98) 
     at org.apache.hadoop.mapred.MapTask$NewDirectOutputCollector.write(MapTask.java:635) 
     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:284) 
     at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.map(PigGenericMapBase.java:277) 
     at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.map(PigGenericMapBase.java:64) 
     at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145) 
     at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764) 
     at org.apache.hadoop.mapred.MapTask.run(MapTask.java:340) 
     at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:167) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at javax.security.auth.Subject.doAs(Subject.java:415) 
     at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1554) 
     at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162) 
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number 
     at parquet.pig.TupleWriteSupport.writeValue(TupleWriteSupport.java:178) 
     ... 24 more 

I가 ParquetStorer를 사용하여 데이터를 저장하는 별명 설명이, 열 C1 int 형이다. 여전히 ParquetStorer는 데이터가 string 유형이고 유형을 입력하지 못하면 Number에 캐스팅합니다.

도움을 주시면 감사하겠습니다.

+0

이 해결책을 찾았습니까? –

답변

0

비슷한 문제가 생겼습니다. 해결 방법은 필드를 chararray로 캐스팅 한 다음 출력을 쪽모 세공 형식으로 저장할 수있었습니다.

case INT32: 
     recordConsumer.addInteger(((Number)t.get(i)).intValue()); 
     break; 

t.get (Ⅰ : 여기

http://grepcode.com/file/repo1.maven.org/maven2/com.twitter/parquet-pig/1.2.0/parquet/pig/TupleWriteSupport.java

이 나에게 좋은 것 같습니다하지만이 경우에서 버그가 수 수 같은 소리, BTW 기능에 대한 소스 코드)는 문자열을 반환하므로

+0

을 공유하십시오. 정확하게 해결책이 아닌 것으로 알고 있습니다. 하지만 당신은 char 값을 사용하여 int 값을 저장할 수 있다고 생각합니까? – Liang

+0

답장을 보내 주셔서 감사합니다! 나는 그것을 chararray에 던져 넣으려고했다. 여전히 같은 오류가 발생합니다. 또한 열을 chararray로 저장하면 사용 사례가 무효화됩니다. 정수 형식으로 저장해야합니다. –

+0

문제는 아니지만,이 해결 방법이 귀하의 케이스에서 작동하지 않아서 유감입니다. lib와 더 많은 경험을 가진 사람이이 문제에 관해 밝힐 수 있기를 바랍니다. – Liang

관련 문제