gpt4 book ai didi

scala - 斯帕克斯卡拉 : iterable to individual key-value pairs

转载 作者:行者123 更新时间:2023-12-03 03:47:24 25 4
gpt4 key购买 nike

我在 Spark Scala 将 Iterable (CompactBuffer) 转换为单个对时遇到问题。我想用 CompactBuffer 中的键值对创建一个新的 RDD。

看起来像这样:

CompactBuffer(Person2, Person5)
CompactBuffer(Person2, Person5, Person7)
CompactBuffer(Person1, Person5, Person11)

CompactBuffers 可以容纳的人数不仅仅是 3 人。基本上我想要的是一个新的 RDD,它具有如下所示的 CompactBuffer 的单独组合(我也想避免相同的键值):

Array[
<Person2, Person5>
<Person5, Person2>
<Person2, Person7>
<Person7, Person2>
<Person5, Person7>
<Person7, Person5>
<Person1, Person5>
<Person5, Person1>
<Person1, Person11>
<Person11, Person1>
<Person5, Person11>
<Person11, Person5>]

有人可以帮助我吗?

提前谢谢

最佳答案

这是生成对的东西(并删除重复的对)。我无法弄清楚如何使用 CompactBuffer,因此它使用 ArrayBuffer,因为 CompactBuffer 的来源说它是一个更高效的 ArrayBuffer。您可能需要将 flatMap 中的 CompactBuffer 转换为支持 .combinations 的内容。

object sparkapp extends App {
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.rdd.RDD
import scala.collection.mutable.ArrayBuffer


val data = List(
ArrayBuffer("Person2", "Person5"),
ArrayBuffer("Person2", "Person5", "Person7"),
ArrayBuffer("Person1", "Person5", "Person11"))

val conf = new SparkConf().setAppName("spark-scratch").setMaster("local")
val sc= new SparkContext(conf)


val dataRDD = sc.makeRDD(data, 1)
val pairs = dataRDD.flatMap(
ab => ab.combinations(2)
.flatMap{case ArrayBuffer(x,y) => List((x, y),(y,x))}
).distinct

pairs.foreach (println _)

}

输出

(Person7,Person2)
(Person7,Person5)
(Person5,Person2)
(Person11,Person1)
(Person11,Person5)
(Person2,Person7)
(Person5,Person7)
(Person1,Person11)
(Person2,Person5)
(Person5,Person11)
(Person1,Person5)
(Person5,Person1)

关于scala - 斯帕克斯卡拉 : iterable to individual key-value pairs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26978587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com