为什么 Spark JavaRDD flatmap 函数 return 是一个迭代器

Why does Spark JavaRDD flatmap function return an iterator

我正在尝试完成 java 字数统计示例。据我了解,spark RDDs 是一种特殊类型的集合,而 flat map 基本上将嵌套集合转换为 Stream> => Stream 那么为什么下面一行中的 spark Java API 需要 return 每行一个迭代器?它在RDD中是如何使用的?

函数不应该在 Arrays.asList(line.toString().split(" ")) 处结束吗?

JavaRDD words =
                lines.flatMap(line -> Arrays.asList(line.toString().split(" ")).iterator());

在 Java API, flatMap function takes an Object/Function of Functional Interface FlatMapFunction 中,其合约(调用函数)是 return 一个迭代器:

java.util.Iterator< R> call(T t) throws Exception

将其与 scala 进行比较 flatMap 你会看到类似的语法。但是作者已经能够使用 scala 的 implicit 功能来实现它,从而更加用户友好。

Iterator< DiffObject> 的原因在您了解 map 应该 return 与输入的项目数量完全相同后可能是不同类型的.但是,flatMap 可以 return 任意数量(包括 0)的元素而不是输入,也可能是不同类型的。在内部实现将使用您提供的 lambda,通过组合这些迭代器的输出来获得最终列表。