簡體   English   中英

Apache Spark過濾器元素

[英]Apache Spark filter elements

我有兩個RDD: pointspointsWithinEps 其內容如下圖: 在此處輸入圖片說明在此處輸入圖片說明

向量表示x, y坐標。 pointsWithinEps代表兩個點以及它們之間的距離。 我想循環所有points並且對於每個點過濾器,僅將pointsWithinEps中的pointsWithinEps作為x (第一個)坐標。 因此,對於第一點,它將從pointsWithinEps給出[0][1]向量。 我有以下代碼:

for (i <- 0 until points.count.toInt) {
  val p = points.take(i + 1).drop(i)
  val currentPointNeighbours = pointsWithinEps.filter {
    case ((x, y), distance) =>
      x == p
  }
  currentPointNeighbours.foreach(println)
  println("----")
}

它不能正常工作。 代碼有什么問題?

如果將RDD轉換為KV RDD,然后在鍵上進行聯接,則可以有效地做到這一點。 對於點,關鍵是點本身,對於距離,關鍵是第一點

  import org.apache.spark.SparkContext._

  type Point = DenseVector
  type Distance = ((Point, Point), Double)

  val points: RDD[Point] = ???
  val pointsWithinEps: RDD[Distance] = ???

  // Prepare Tuple2 RDD to enable spark tuple functions
  val pointsToKV: RDD[(Point, Unit)] = points.map(p => p -> ())
  val distance: RDD[(Point, Distance)] = pointsWithinEps.map(distance => distance._1._1 -> distance)

  // Join points with distance
  val filtered: RDD[Distance] = pointsToKV.join(distance) map (_._2._2)

暫無
暫無

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

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