[英]Spark & Scala - Cannot Filter null Values from RDD
我試圖從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)
調試時,過濾后仍然出現空值:
(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)
RDD是不可變對象 - RDD上的任何轉換都不會改變原始RDD,而是產生新的RDD。 所以 - 你應該使用從filter
返回的RDD(就像你對map
的結果一樣),如果你想看到filter
的效果:
val result = Ratings.filter ( x => x._1 != null )
result.foreach(println)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.