我试图从 RDD 中过滤空值但失败了。这是我的代码:
val hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat],
classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],
classOf[org.apache.hadoop.hbase.client.Result])
val raw_hbaserdd = hBaseRDD.map{
kv => kv._2
}
val Ratings = raw_hbaseRDD.map {
result => val x = Bytes.toString(result.getValue(Bytes.toBytes("data"),Bytes.toBytes("user")))
val y = Bytes.toString(result.getValue(Bytes.toBytes("data"),Bytes.toBytes("item")))
val z = Bytes.toString(result.getValue(Bytes.toBytes("data"),Bytes.toBytes("rating")))
(x,y, z)
}
Ratings.filter ( x => x._1 != null )
Ratings.foreach(println)
Debugging的时候,filter后面还是出现了null值:
(3359,1494,4)
(null,null,null)
(28574,1542,5)
(null,null,null)
(12062,1219,5)
(14068,1459,3)
有更好的主意吗?
最佳答案
Ratings.filter ( x => x._1 != null )
这实际上转换了 RDD,但您没有使用那个特定的 RDD。你可以试试
Ratings.filter(_._1 !=null).foreach(println)
关于scala - Spark & Scala - 无法从 RDD 中过滤空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38738930/