Spark:从RDD [X]生成所有可能组合的RDD [(X,X)]

Eug*_*nev 22 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)`
   */
Run Code Online (Sandbox Code Playgroud)

例如,对于size = 2的组合,如何从RDD [X]到RDD [List [X]]或RDD [(X,X)].并且假设RDD中的所有值都是唯一的.

aar*_*man 28

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

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

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