Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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
Scala 从另一个RDD中减去一个RDD不';我不能正常工作_Scala_Apache Spark_Spark Graphx - Fatal编程技术网

Scala 从另一个RDD中减去一个RDD不';我不能正常工作

Scala 从另一个RDD中减去一个RDD不';我不能正常工作,scala,apache-spark,spark-graphx,Scala,Apache Spark,Spark Graphx,我想从另一个RDD中减去一个RDD。我查阅了文档,发现subtract可以做到这一点。实际上,当我测试subtract时,最终的RDD保持不变,并且没有删除值 还有其他功能可以做到这一点吗?还是我使用的减法不正确 以下是我使用的代码: val vertexRDD: org.apache.spark.rdd.RDD[(VertexId, Array[Int])] val clusters = vertexRDD.takeSample(false, 3) val clustersRDD: R

我想从另一个RDD中减去一个RDD。我查阅了文档,发现
subtract
可以做到这一点。实际上,当我测试
subtract
时,最终的RDD保持不变,并且没有删除值

还有其他功能可以做到这一点吗?还是我使用的
减法不正确

以下是我使用的代码:

 val vertexRDD: org.apache.spark.rdd.RDD[(VertexId, Array[Int])]
 val clusters  = vertexRDD.takeSample(false, 3)
 val clustersRDD: RDD[(VertexId, Array[Int])] = sc.parallelize(clusters)
 val final = vertexRDD.subtract(clustersRDD)
 final.collect().foreach(println(_))

通常不支持或至少不建议使用可变类型(本例中为数组)执行集操作,如减法

尝试改用不可变类型


我相信是将数组存储在集合中的相关容器,但我不确定。

如果您的rdd是由可变对象组成的,它将无法工作。。。问题是它也不会显示错误,所以这类问题很难识别,我昨天也遇到过类似的问题,我使用了一种变通方法

rdd.keyBy( someImmutableValue ) -> do this using the same key value to
 both your rdds

val resultRDD = rdd.subtractByKey(otherRDD).values
最近,我尝试了2个RDD(数组列表)的减法运算,它正在工作。重要的一点是-RDD val after.subtract方法应该是要从中减去的列表,而不是相反

正确:
val result=要减去的元素。减去(从列表中)


incorrect:
val reuslt=fromList.subtract(您想要减去的元素)
(不会给出任何编译/运行时错误消息)

我需要使用数组!我怎样才能解决这个问题?或者我可以使用的其他类型是什么?否则,我认为数组在Scala中是一种不可变的类型。@Omarmasoudi不,
Array
与其他语言中的可变JVM数组一样。唯一的区别是,它在Scala中是不协变的(在Scala中是不变的)。@OphirYoktan啊,好的!非常感谢。当我使用Seq进行测试时,它可以工作!