求助 rdd.saveAsNewAPIHadoopFile 的一个奇怪问题

查看数: 15058 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-12-22 16:45

正文摘要:

额这个问题个人感觉好奇怪,可能又是我哪里疏漏了什么 结果加了if判断后,下面那条saveAsNewAPIHadoopFile的语句就报错了,执行也无法通过,报错: Error:(185, 56) value saveAsNewAPIHadoopFile is not ...

回复

grinsky 发表于 2017-12-22 20:28:43
解决了,在path那里,填个路径就好了,数据还是写入对应的hbsae的表里
没有存到path里面去。
grinsky 发表于 2017-12-22 19:13:20
m331283153 发表于 2017-12-22 17:43
你上面没加判断的时候result的类型是RDD[(ImmutableBytesWritable, Put)]这个类型,加了判断之后result里面 ...

嗯嗯,的确是这个问题(我原来以为不满足if的数据就会被丢掉的……,结果这里是原样保存不处理的)不过处理好后,又有新的问题了。
接收到的第一条消息都能正常存储到hbase对应的表中,但执行完第一条后就报错了……

java.lang.IllegalArgumentException: Can not create a Path from an empty string


我已经设置了过滤空的rdd,但好像没什么用
val lines3 = lines2.flatMap(line =>{line.toString.split(splitstr2)}).filter(line => line.length > 2)
val result = lines3.map(line => convertToHbasePut(line,splitstr1))
result.foreachRDD(rdd => {if(! rdd.isEmpty()){rdd.saveAsNewAPIHadoopFile("", classOf[ImmutableBytesWritable], classOf[Put], classOf[MultiTableOutputFormat], jobConf)}})
ssc.start()
ssc.awaitTermination()
m331283153 发表于 2017-12-22 17:44:53
先filter再map
m331283153 发表于 2017-12-22 17:43:25
你上面没加判断的时候result的类型是RDD[(ImmutableBytesWritable, Put)]这个类型,加了判断之后result里面既有(ImmutableBytesWritable, Put)还有空值类型  ,所以result就变成RDD[Any]了   
你应该是先把空值过滤掉在map
langke93 发表于 2017-12-22 17:07:12
看到你的代码都是灰色的,可能是参数类型等类似问题造成的。目前想到的解决办法,如果在里面有问题,那就把条件判断提前,别放到里面。
关闭

推荐上一条 /2 下一条