scala - Spark : produce RDD[(X, X)] 来自 RDD[X] 的所有可能组合

标签 scala apache-spark

Spark 是否可以从 Scala 集合中实现“.combinations”功能?

   /** Iterates over combinations.
   *
   *  @return   An Iterator which traverses the possible n-element combinations of this $coll.
   *  @example  `"abbbc".combinations(2) = Iterator(ab, ac, bb, bc)`
   */

例如,对于大小 = 2 的组合,我如何从 RDD[X] 到 RDD[List[X]] 或 RDD[(X,X)]。让我们假设 RDD 中的所有值都是唯一的。

最佳答案

笛卡尔积和组合是两个不同的东西,笛卡尔积会创建一个大小为rdd.size() ^ 2的RDD。和组合将创建一个大小为 rdd.size() choose 2 的 RDD

val rdd = sc.parallelize(1 to 5)
val combinations = rdd.cartesian(rdd).filter{ case (a,b) => a < b }`.
combinations.collect()

请注意,这仅在列表元素上定义了排序时才有效,因为我们使用 < .这个只适用于选择两个,但可以通过确保关系轻松扩展 a < b对于序列中的所有 a 和 b

关于scala - Spark : produce RDD[(X, X)] 来自 RDD[X] 的所有可能组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26557873/

相关文章:

scala - 推断常见的父类(super class)型

scala - 如何使用reduce或fold来避免可变状态

Scala 单元到匿名类

apache-spark - KMeans 与 Spark 1.6.2 VS Spark 2.0.0

scala - AssemblyKey用作什么,以及如何导入它们?

algorithm - 从 Map [Scala] 中获取某些键的值总和

scala - 对象spark不是包org的成员

scala - 如何停止 Spark Streaming

scala - 从Spark查询Elastic搜索返回空Map的值

sql - View 中的 Hive 多个 CTE