Dictionary 基于位于另一个RDD中的键替换RDD中的值

Dictionary 基于位于另一个RDD中的键替换RDD中的值,dictionary,apache-spark,substitution,Dictionary,Apache Spark,Substitution,如何基于另一个RDD中的键在RDD中分配/映射值 e、 g.从: val rdd1=sc.parallelize(Seq((1,“A”),(2,“B”)) val rdd2=sc.parallelize(顺序((“A”,“B”),(“B”,“B”),(“B”,“A”)) 我怎么能得到这样的东西 (1,2)(2,2)(2,1) 将rdd1广播为查找表(如字典),然后在rdd2映射中使用广播的查找表 rdd1_local = sc.parallelize([(1,"A"),(2,"B")]).m

如何基于另一个RDD中的键在RDD中分配/映射值

e、 g.从:

val rdd1=sc.parallelize(Seq((1,“A”),(2,“B”))
val rdd2=sc.parallelize(顺序((“A”,“B”),(“B”,“B”),(“B”,“A”))
我怎么能得到这样的东西

(1,2)(2,2)(2,1)

将rdd1广播为查找表(如字典),然后在rdd2映射中使用广播的查找表

rdd1_local = sc.parallelize([(1,"A"),(2,"B")]).map(lambda x:(x[1],x[0])).collectAsMap()
rdd1_broadcast = sc.broadcast(rdd1_local)
rdd2 = sc.parallelize([("A", "B"), ("B", "B"), ("B", "A")])
rdd2.map(lambda x:(rdd1_broadcast.value[x[0]],rdd1_broadcast.value[x[1]])).take(2)
Scala版本:

val rdd1 = sc.parallelize(Seq((1, "A"), (2, "B")))
val rdd2 = sc.parallelize(Seq(("A", "B"), ("B", "B"), ("B", "A")))

val rdd1_broadcast = sc.broadcast(rdd1.map(x=>(x._2,x._1)).collectAsMap())
val resultRDD = rdd2.map{x=> (rdd1_broadcast.value(x._1),rdd1_broadcast.value(x._2))}

两个RDD都很大吗?它们适合您的驱动程序吗?rdd1是几GB,但rdd2是巨大的。拍摄的目的是什么(2)?