[英]How to zip two RDDs (Scala)
我有兩個具有以下形式的RDD:
RDD A :(列:icchID,X_Coord)
[ICCH 1,10.0]
[ICCH 2,10.0]
[ICCH 4,100.0]
[ICCH 4,100.0]
[ICCH 2,13.0]
RDD B :(列:Y_Coord,類)
[10.0,A]
[64.0,B]
[39.0,A]
[9.0,C]
[80.0,D]
我想將這兩個RDD組合在一起,以便擁有一個具有以下形式的RDD:
[ICCH 1,10.0,10.0,A]
[ICCH 2,10.0,64.0,B]
[ICCH 4,100.0,39.0,A]
[ICCH 4,100.0,9.0,C]
[ICCH 2,13.0,80.0,D]
請注意,兩個RDD的行和列都相同。 是否可以使用Scala做到這一點?
PS我是Scala的菜鳥。 我正在使用Databricks。
您可以考慮使用RDD zip
方法以及通過map
進行的轉換:
val rddA = sc.parallelize(Seq(
("ICCH 1", 10.0), ("ICCH 2", 10.0), ("ICCH 4", 100.0), ("ICCH 5", 100.0), ("ICCH 2", 13.0)
))
val rddB = sc.parallelize(Seq(
(10.0, "A"), (64.0, "B"), (39.0, "A"), (9.0, "C"), (80.0, "D")
))
val zippedRDD = (rddA zip rddB).map{ case ((id, x), (y, c)) => (id, x, y, c) }
// zippedRDD: org.apache.spark.rdd.RDD[(String, Double, Double, String)] = ...
zippedRDD.collect
// Array[(String, Double, Double, String)] = Array(
// (ICCH 1,10.0,10.0,A), (ICCH 2,10.0,64.0,B), (ICCH 4,100.0,39.0,A), (ICCH 5,100.0,9.0,C), (ICCH 2,13.0,80.0,D)
// )
請注意,盡管維護兩個RDD之間的順序是一件棘手的事情。 這是有關訂購問題的相關SO link
。
以下是Spark API doc re:RDD zip
方法所說的內容:
def zip[U](other: RDD[U])(implicit arg0: ClassTag[U]): RDD[(T, U)]
將另一個RDD壓縮,並返回鍵值對以及每個RDD中的第一個元素,每個RDD中的第二個元素等。假定兩個RDD具有相同數量的分區和相同數量的元素 (例如,一個是通過另一張地圖制作的)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.