减去成对rdd中的值

fbcarpbf  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(346)

我对scala和spark还不熟悉。
有两个RDD像
rdd_a=(键a,5),(键B,10)
rdd_b=(键a,3),(键b,7)
我如何计算:rdd\u a-rdd\u b,得到(keya,2),(keyb,3)
我尝试了减法和减法键,但我无法得到类似的输出如上所述

sdnqo3pr

sdnqo3pr1#

假设每个rdd只有一个指定键的值:

val df =
  Seq(
    ("A", 5),
    ("B", 10)
  ).toDF("key", "value")

val df2 =
  Seq(
    ("A", 3),
    ("B", 7)
  ).toDF("key", "value")

可以使用合并这些RDD union 并通过 groupBy 具体如下:

import org.apache.spark.sql.functions._
df.union(df2)
  .groupBy("key")
  .agg(first("value").minus(last("value")).as("value"))
  .show()

将打印:

+---+-----+
|key|value|
+---+-----+
|  B|    3|
|  A|    2|
+---+-----+
kh212irz

kh212irz2#

rdd解决方案的问题请找到内联代码注解的解释

object SubtractRDD {

  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder().master("local[*]").getOrCreate(); // Create Spark Session

    val list1 = List(("keyA",5),("keyB",10))
    val list2 = List(("keyA",3),("keyB",7))
    val rdd1= spark.sparkContext.parallelize(list1)  // convert list to RDD
    val rdd2= spark.sparkContext.parallelize(list2)

    val result = rdd1.join(rdd2)  // Inner join RDDs
      .map(x => (x._1, x._2._1 - x._2._2 ))  // Combiner function for RDDs
      .collectAsMap()  // Collect result as Map
    println(result)
  }

}

相关问题