为什么 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,通过组合这些迭代器的输出来获得最终列表。
我正在尝试完成 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,通过组合这些迭代器的输出来获得最终列表。