簡體   English   中英

火花RDD過濾器內部循環

[英]loop inside spark RDD filter

我是Spark的新手,正在嘗試在Scala中進行編碼。 我有一個RDD,其中包含以下形式的數據:

1: 2 3 5
2: 5 6 7 
3: 1 8 9
4: 1 2 4

以及另一個格式為[1,4,8,9]的列表

我需要對RDD進行過濾,以使其采用那些在列表中出現“:”之前的值或在列表中出現“:”之后的值的行。

我寫了以下代碼:

val links = linksFile.filter(t => {
                        val l = t.split(": ")
                        root.contains(l(0).toInt) ||
                        for(x<-l(0).split(" ")){
                            root.contains(x.toInt)
                        }
                    })

linksFile是RDD,而root是列表。

但這是行不通的。 有什么建議么??

您接近了:for循環實際上並沒有使用其中計算的值。 您應該改為使用exists方法。 我也認為您想要l(1) ,而不是l(0)用於第二次檢查:

val links = linksFile.filter(t => {
                        val l = t.split(": ")
                        root.contains(l(0).toInt) ||
                        l(1).split(" ").exists { x =>
                            root.contains(x.toInt)
                        }
                    })

沒有yield的理解並不會... ...屈服:)但是,您在這里實際上並不需要理解(或任何“循環”)。

像這樣:

linksFile.map(
   _.split(": ").map(_.toInt)
 ).filter(_.exits(list.toSet))
  .map(_.mkString)

應該這樣做。

暫無
暫無

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

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