拥有以下RDD:
RDD =(AAAAABAAAAABAAAAABAAAAAB,BBAAAAAAAAAABBAAAAAAAAAA)
我必须计算事件之间的转换总数,因此对于此示例,结果应为:
("A","B") -> 5 , ("B","A") -> 5
目前,我有以下解决方案,但我不知道是否可以实现更高效的解决方案。
val rddSplited = rdd.map((x) => x.split(":")(1)
.replaceAll("(.)\\1+", "$1"))
val finalrdd = rddSplited.flatMap(x => x.sliding(2))
.map(x => ((x.charAt(0).toString,x.charAt(1).toString),1l))
val finalmap = finalrdd.reduceByKey(_+_).collectAsMap()
感谢。
答案 0 :(得分:0)
某些过滤和分组可以包含在" flatMap"
中rddSplited.flatMap(row => row.sliding(2).
filter(pair => pair(0) != pair(1)).toSeq.groupBy(identity).mapValues(_.length)
)
结果:
(BA,3)
(AB,4)
(BA,2)
(AB,1)