fix Spark RDD生成成功,但是dump失败问题

最近碰到一个很奇葩的问题,RDD成功产生(rdd.take(100).mkstring("\n")成功打出),但是dump到hdfs失败,报如下的错误

org.apache.parquet.io.InvalidRecordException: could not get child 3 from [GroupColumnIO user r:0 d:1 [user], GroupColumnIO items r:0 d:1 [items], PrimitiveColumnIO expId r:0 d:1 [expId]]
	at org.apache.parquet.io.GroupColumnIO.getChild(GroupColumnIO.java:114)
	at org.apache.parquet.thrift.ParquetWriteProtocol$StructWriteProtocol.(ParquetWriteProtocol.java:322)
	at org.apache.parquet.thrift.ParquetWriteProtocol$MessageWriteProtocol.(ParquetWriteProtocol.java:397)
	at org.apache.parquet.thrift.ParquetWriteProtocol.(ParquetWriteProtocol.java:431)
	at org.apache.parquet.hadoop.thrift.AbstractThriftWriteSupport.prepareForWrite(AbstractThriftWriteSupport.java:121)
	at org.apache.parquet.hadoop.t

java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
	at java.util.ArrayList.rangeCheck(ArrayList.java:657)
	at java.util.ArrayList.get(ArrayList.java:433)
	at org.apache.parquet.io.GroupColumnIO.getChild(GroupColumnIO.java:112)
	... 19 more

RDD的类型定义定义

struct MCRecommendSamplesBatch {
    1: optional MCRankerUserInfo.MCRankerUserInfo user;
    2: optional MCRankerUserInfo.RankerContextInfo context; // 暂时没用到
    3: optional list<RecommendImpression> items;
    4: optional string expId;

}

 看错误的显示就是没找到context,这个太扯淡了,搞了半天发现是 RankerContextInfo 定义的结构体为空导致的,加了个字段就没事了。

struct RankerContextInfo {  // 原来因为没用到context特征,啥也没定义,导致报错

}

struct RankerContextInfo { // 改成这样就可以了
	1:optional string debug;	

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值