Я реализовал код в Scala, который использует метод, написанный на Java.В приведенном ниже коде processSale()
- это метод Java, который принимает util.List<Sale>
в качестве параметра.
Я преобразовал Scala Iterable[Sale]
в Seq[Sale]
, а затем в util.List<Sale>
с помощью scala.collection.JavaConverters._
val parseSales: RDD[(String, Sale)] = rawSales
.map(sale => sale.Id -> sale)
.groupByKey()
.mapValues(a => SaleParser.processSale(a.toSeq.asJava))
Однако, когда код выполняется как частьSpark driver задание не выполняется из-за сбоя задания с UnsupportedOperationException
.Я просмотрел журналы, и кажется, что причина в методе Java processSale
при вызове Collections.sort
Collections.sort(sales, new Comparator<InvocaCall>() {
@Override
public int compare(Sale sale1, Sale sale2) {
return Long.compare(sale1.timestamp, sale2.timestamp);
}
});
Я застрял в этой точке, потому что я передаютребуется util.List<Sale>
.Почему Collections.sort
может быть неподдерживаемой операцией в этом случае?