簡體   English   中英

Spark&Scala - 無法從RDD過濾空值

[英]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)

試試以下內容:

Ratings.filter(x => x._1!=“”)

這里的類似示例是按字段Scala中的值過濾rdd行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM