我的数据集如下:
+-----------+-----------+----------+
| property1 | property2 | distance |
+-----------+-----------+----------+
| 1 | 1 | 0 |
| 1 | 2 | .3 |
| 1 | 3 | .1 |
| 2 | 1 | .3 |
| 2 | 2 | 0 |
| 2 | 3 | .1 |
| 3 | 1 | .1 |
| 3 | 2 | .1 |
| 3 | 3 | 0 |
+-----------+-----------+----------+
我需要按property1
对此进行分组,然后按distance
对其进行排序。该数据集目前为RDD"结果"。我写了这段代码
val resultset = results.map{ case (subjectid, compid, distance) => (subjectid, compid, distance.toDouble)}
val groupedBySubjectComps = resultset.groupBy(_._1)
val sortedCompsBySubjectComps = groupedBySubjectComps mapValues { triples =>
val sortedTriples = triples.sortBy(_._3)
val keepOnlyComps = sortedTriples.map(_._2)
keepOnlyComps
}
sortBy有错误。它说sortBy不是Iterable的成员
我做错了什么?
答案 0 :(得分:0)
triples
是Iterator,不是集合。根据Scala文档,Iterator没有sortBy方法(这是有道理的,因为迭代器更像是刚刚流过的数据流。考虑尝试类似的东西:
val sortedTriples = triples.toArray.sortBy(_._3)
将其更改为可以分类的集合。