解决了,在path那里,填个路径就好了,数据还是写入对应的hbsae的表里 没有存到path里面去。 |
m331283153 发表于 2017-12-22 17:43 嗯嗯,的确是这个问题(我原来以为不满足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() |
先filter再map |
你上面没加判断的时候result的类型是RDD[(ImmutableBytesWritable, Put)]这个类型,加了判断之后result里面既有(ImmutableBytesWritable, Put)还有空值类型 ,所以result就变成RDD[Any]了 你应该是先把空值过滤掉在map |
看到你的代码都是灰色的,可能是参数类型等类似问题造成的。目前想到的解决办法,如果在里面有问题,那就把条件判断提前,别放到里面。 |