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/