伙计我的方法组合有问题
我的代码:
val myRDD = sc.parallelize(Seq("aaa bbb bbb"))
myRDD: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[0] at parallelize at <console>:27
scala> myRDD.foreach{println}
aaa bbb bbb
scala> myRDD.map(_.split(" ")).flatMap(_.combinations(2)).
| map(p=>(p.mkString(","),1)).
| reduceByKey(_+_).
| foreach{println}
(aaa,bbb,1)
(bbb,bbb,1)
&#13;
我不会&#39;为什么输出不是
(aaa,bbb,2)
(bbb,aaa,2)
(bbb,bbb,1)
&#13;
答案 0 :(得分:1)
在组合函数中,长度为n的 组合是原始序列的子序列,其元素按顺序。所以在你的情况下,对于(aaa,bbb,bbb),可能的子序列是(aaa,bbb)和(bbb,bbb)但不是(bbb,aaa)。
答案 1 :(得分:1)
迭代组合。长度为n的组合是原始序列的子序列,其元素按顺序排列。因此,&#34; xy&#34;和&#34; yy&#34;是&#34; xyy&#34;的长度为2的组合,但是&#34; yx&#34;不是。如果生成相同子序列的方法不止一种,则只返回一个。
例如,&#34; xyyy&#34;有三种不同的方式来生成&#34; xy&#34; 取决于第一个,第二个或第三个&#34; y&#34;被选中。但是,因为所有内容都相同,所以只选择一个。将采用三者中的哪一个是未定义的实现细节。
在您的具体情况中,这会分解为:
(aaa, bbb)
(aaa, bbb) //Thrown out since it duplicates the first
(bbb, bbb)