scala - 使用scala在 Spark 中创建对RDD

标签 scala apache-spark hadoop

我是新手,所以我只需要创建两个元素的RDD即可。

Array1 = ((1,1)(1,2)(1,3),(2,1),(2,2),(2,3)

当我执行groupby键时,输出为((1,(1,2,3)),(2,(1,2,3))
但是我需要输出与键只有2个值对。我不确定如何获得它。
Expected Output = ((1,(1,2)),(1,(1,3)),(1(2,3),(2(1,2)),(2,(1,3)),(2,(2,3)))

这些值只能打印一次。应该只有(1,2)而不是(2,1)或像(2,3)而不是(3,4)
谢谢

最佳答案

您可以按以下方式获得所需的结果:

// Prior to doing the `groupBy`, you have an RDD[(Int, Int)], x, containing:
//   (1,1),(1,2),(1,3),(2,1),(2,2),(2,3)
//
// Can simply map values as below. Result is a RDD[(Int, (Int, Int))].
val x: RDD[(Int, Int)] = sc.parallelize(Seq((1,1),(1,2),(1,3),(2,1),(2,2),(2,3))
val y: RDD[(Int, (Int, Int))] = x.map(t => (t._1, t)) // Map first value in pair tuple to the tuple
y.collect // Get result as an array
// res0: Array[(Int, (Int, Int))] = Array((1,(1,1)), (1,(1,2)), (1,(1,3)), (2,(2,1)), (2,(2,2)), (2,(2,3)))

也就是说,结果是一个对RDD,它将键(每个对的第一个值)与该对(作为元组)相关联。不要使用groupBy,因为在这种情况下,它将无法满足您的需求。

关于scala - 使用scala在 Spark 中创建对RDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53047328/

相关文章:

scala - 为什么 Scala IntelliJ 插件需要这么长时间才能启动我的应用程序?

hadoop - 我们如何将 HadoopRDD 结果转换为 Parquet 格式?

hadoop - apache pig 中的 "substr"语句

hadoop - 我们如何在 hadoop 生态系统之上构建 Multi-Tenancy ?

scala - 在线应用部分应用函数的问题

scala - Spark 和 HBase 快照

ScalaCheck - 有序数组生成器

apache-spark - Spark 中的快速 Parquet 行数

apache-spark - Spark 如何并行处理 1TB 文件?

python - 如何查找数组的任何元素是否在 pyspark 的范围内