私はjava8とsparkの新人で、javaで単純なフラットマップ変換プログラムを実行しようとしていますが、最後の2行目のフラットマップ変換でArrays.asList(e.split(" ")));
エラーが発生し、エラーが
タイプの不一致:から
List<String>
に変換できませんIterator<String>
この問題の適切な解決策は何ですか。前もって感謝します
import java.util.Arrays;
import java.util.List;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.commons.lang.StringUtils;
public class FlatMapExample {
public static void main(String[] args) throws Exception {
SparkConf sparkConf = new
SparkConf().setMaster("local").setAppName("filter
transformation");
JavaSparkContext sc = new JavaSparkContext(sparkConf);
// Parallelized with 2 partitions
JavaRDD<String> rddX = sc.parallelize(
Arrays.asList("spark rdd example", "sample example"),
2);
// map operation will return List of Array in following case
JavaRDD<String[]> rddY = rddX.map(e -> e.split(" "));
List<String[]> listUsingMap = rddY.collect();
for(int i = 0; i < listUsingMap.size(); i++)
{
System.out.println("list.."+StringUtils.join(listUsingMap.get(i)));
}
//System.out.println("listUsingMap..."+listUsingMap.collect());
// flatMap operation will return list of String in following case
JavaRDD<String> rddY2 = rddX.flatMap(e -> Arrays.asList(e.split(" ")));
List<String> listUsingFlatMap = rddY2.collect();
}
}
実際にはを返すバージョン2.0
でFlatMapFunction::call
はIterator
なく、実際にを返すバージョンを使用していることを指定しておく必要がありますIterable
(たとえば1.6ではこれが当てはまります)。したがって、rddX.flatMap
はIterator<String>
をArrays.asList(e.split(" "))
返す一方、はを返すとしますList<String>
。
ただしList::iterator
、次のように使用できます。
rddX.flatMap(e -> Arrays.asList(e.split(" ")).iterator())
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加