Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spark-从Scala代码调用Java方法时不支持OperationException_Java_Scala_Apache Spark_Collections - Fatal编程技术网

Spark-从Scala代码调用Java方法时不支持OperationException

Spark-从Scala代码调用Java方法时不支持OperationException,java,scala,apache-spark,collections,Java,Scala,Apache Spark,Collections,我已经用Scala实现了代码,它使用的是Java编写的方法。 在下面的代码中,processSale()是一个Java方法,它将util.List作为参数 在Scala.collection.JavaConverters的帮助下,我将ScalaIterable[Sale]转换为Seq[Sale],然后转换为util.List。\u val parseSales: RDD[(String, Sale)] = rawSales .map(sale => sale.Id ->

我已经用Scala实现了代码,它使用的是Java编写的方法。 在下面的代码中,
processSale()
是一个Java方法,它将
util.List
作为参数

Scala.collection.JavaConverters的帮助下,我将Scala
Iterable[Sale]
转换为
Seq[Sale]
,然后转换为
util.List
。\u

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);
                }
            });
Collections.sort(销售、新比较器(){
@凌驾
公共整数比较(销售额1、销售额2){
返回Long.compare(sale1.timestamp,sale2.timestamp);
}
});

我被困在这一点上,因为我正在传递所需的
util.List
。为什么在这种情况下,
Collections.sort
可能是不受支持的操作

为rawSales添加空检查
util.List


为rawSales
util.List添加空检查

发件人:

因为Java不区分可变和不可变 类型中的集合,例如,
scala.immutable.List
将生成一个
java.util.List
,其中 变异操作抛出一个
不支持的操作异常

代码中的
toSeq
返回
immutable.Seq
,这就是为什么会出现异常

因此,您的列表是可变数据结构,如
ListBuffer

list.to[scala.collection.mutable.ListBuffer].asJava
发件人:

因为Java不区分可变和不可变 类型中的集合,例如,
scala.immutable.List
将生成一个
java.util.List
,其中 变异操作抛出一个
不支持的操作异常

代码中的
toSeq
返回
immutable.Seq
,这就是为什么会出现异常

因此,您的列表是可变数据结构,如
ListBuffer

list.to[scala.collection.mutable.ListBuffer].asJava

将“无”分配给RDD?@Duelist程序员将决定他们是否需要其他东西;否则没有。将“没有”分配给RDD?@Duelist程序员将决定他们是否需要其他东西;否则就没有了。