2017-03-21 1 views
0

Scalaに完全に含まれているhere からJavaの内部関数を移植するにはどうすればよいですか?ScalaでJavaの内部関数を移植する方法は?

JavaPairRDD<Envelope, HashSet<Point>> castedResult = joinListResultAfterAggregation.mapValues(new Function<HashSet<Geometry>,HashSet<Point>>() 
      { 
       @Override 
       public HashSet<Point> call(HashSet<Geometry> spatialObjects) throws Exception { 
        HashSet<Point> castedSpatialObjects = new HashSet<Point>(); 
        Iterator spatialObjectIterator = spatialObjects.iterator(); 
        while(spatialObjectIterator.hasNext()) 
        { 
         castedSpatialObjects.add((Point)spatialObjectIterator.next()); 
        } 
        return castedSpatialObjects; 
       } 

      }); 
      return castedResult; 

私のアプローチ下記のとおりが原因これについていくつかのNotinferredU

val castedResult = joinListResultAfterAggregation.mapValues(new Function[java.util.HashSet[Geometry], java.util.HashSet[Point]]() { 
    def call(spatialObjects: java.util.HashSet[Geometry]): java.util.HashSet[Point] = { 
     val castedSpatialObjects = new java.util.HashSet[Point] 
     val spatialObjectIterator = spatialObjects.iterator 
     while (spatialObjectIterator.hasNext) castedSpatialObjects.add(spatialObjectIterator.next.asInstanceOf[Point]) 
     castedSpatialObjects 
    } 
    }) 

答えて

1

コンパイルエラーに関する質問をするときは、特にコードがそれ自身ではない場合は、正確なエラーを入力してください。

内部関数自体は問題ありません。そのmapValuesはScalaの機能ではなく、org.apache.spark.api.java.function.Functionをとるので、(Somethingjava.util.HashSetscala.collection.Setまたはいくつかのサブタイプであることができます)私の推測が原因joinListResultAfterAggregation上記の変更にはもうJavaPairRDDではなく、通常のRDD[(Envelope, Something)]ということでしょう。スカラ関数はlambdas:spatialObjects: Something => ...と書かれています(本体は実際にはSomethingのものに依存しますが、場合によっては引数の型を省略することもできます)。

1

どのようにコンパイルされないでしょうか?

関連する問題