【发布时间】:2018-10-11 10:57:18
【问题描述】:
我在 Scala 中实现了使用 Java 编写的方法的代码。
在下面的代码中,processSale() 是一个以util.List<Sale> 为参数的 Java 方法。
在scala.collection.JavaConverters._ 的帮助下,我已将 Scala Iterable[Sale] 转换为 Seq[Sale],然后转换为 util.List<Sale>
val parseSales: RDD[(String, Sale)] = rawSales
.map(sale => sale.Id -> sale)
.groupByKey()
.mapValues(a => SaleParser.processSale(a.toSeq.asJava))
但是,当代码作为 Spark 驱动程序的一部分执行时,作业会因任务失败而失败,UnsupportedOperationException。我查看了日志,似乎原因在于 Collections.sort 调用的 Java processSale 方法中
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 在这种情况下会成为不受支持的操作?
【问题讨论】:
标签: java scala apache-spark collections