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