2016-03-05 6 views
5

私は、JavaにこのScalaの表現を変換しようとしている:Scalaの表現は、Java 1.8に変換

RDD<String> corpus = sc.wholeTextFiles("docs/*.md").map(a -> a._2); 

しかし、私はa._2上のエラーを取得:

val corpus: RDD[String] = sc.wholeTextFiles("docs/*.md").map(_._2) 

これは、私はJavaで持っているものです:。

Bad return type in lambda expression: String cannot be converted to R

私は「スーパー」方法に行けば、これは私が見たものである:ScalaのPairRDDで

package org.apache.spark.api.java.function; 

import java.io.Serializable; 

public interface Function<T1, R> extends Serializable { 
     R call(T1 var1) throws Exception; 
} 

答えて

5

はタプル型であり、あなたが_1_2とそのメンバーにアクセスすることができます。しかし、Javaではタプルが組み込まれていないので、これらのメンバーを取得するためのメソッドを使用する必要があります。これは、Javaは常に任意の関数にかっこを必要とするため、このようになります。

JavaRDD<String> corpus = sc.wholeTextFiles("docs/*.md").map(a -> a._2()); 

編集:Scalaで暗黙のパラメータを使用すると、Javaで明示的にそれを渡すために持っていることを意味map方法、に渡されているようです。 Java Docの場合はhere、Scalaの場合はhereを参照してください。

編集2:答えが見つからなかった数時間後、JavaRDDでなければなりませんでした。

+0

が、私はこれと同じエラーを取得していないことを

JavaRDD<String> corpus = sc.wholeTextFiles("docs/*.md").values(); 

注意を... "文字列をRに変換できません" – neuromouse

+0

これは奇妙なことですが、 'a'はscala.Tuple2 型である必要があります。あなたのケースにどのようなタイプaがあるか確認できますか? –

+0

これは私に同じエラーをもたらします:(Tuple2 a) - > a._2()。しかし、私は文字列(Tuple2 a) - > a._2() - 別のエラーが表示されます:メソッドマップ(<ラムダ式>)を解決できません – neuromouse

2

あなたがここにJavaで欲しい結果を得るためにvalues()を使用することができるはずです。ここではタイプがJavaRDDはRDDが

関連する問題