我嘗試轉換下面的代碼段什麼是Scala版本的ArrayList和Tuple?
public org.apache.spark.mllib.linalg.Vector call(Tuple2<IntWritable, VectorWritable> arg0)
throws Exception {
org.apache.mahout.math.Vector mahoutVector = arg0._2.get();
Iterator<Element> elements = mahoutVector.nonZeroes().iterator();
ArrayList<Tuple2<Integer, Double>> tupleList = new ArrayList<Tuple2<Integer, Double>>();
while (elements.hasNext()) {
Element e = elements.next();
if (e.index() >= nCols || e.get() == 0)
continue;
Tuple2<Integer, Double> tuple = new Tuple2<Integer, Double>(e.index(), e.get());
tupleList.add(tuple);
}
org.apache.spark.mllib.linalg.Vector sparkVector = Vectors.sparse(nCols, tupleList);
return sparkVector;
}
我是相當新的斯卡拉所以我不知道如何正確地轉換。到目前爲止,我得到了
def transformSvec(x: Vector) : org.apache.spark.mllib.linalg.Vector = {
val iter=x.nonZeroes.iterator()
//iterate the items and add to an arraylist
//or an iterable/seq for scala, if var seq: Seq[(Int, scala.Double)] is chosen then
org.apache.spark.mllib.linalg.Vectors.sparse(x.size, seq)
}
任何人都可以幫忙嗎?提前致謝。
它拋出以下錯誤:「值濾波器不是一個成員java.util.Iterator [org.apache.mahout.math.Vector.Element]「 – user3086871
@ user3086871如果你有一個Java迭代器,你需要先將它轉換爲一個Scala迭代器,'import scala.collection.JavaConverters._'通過該導入,您可以在迭代器中調用'.asScala'將其轉換爲Scala迭代器。 – puhlen