为什么Spark JavaRDD flatmap函数返回迭代器

时间:2018-03-22 05:12:49

标签: apache-spark flatmap

我正在尝试浏览java字数计算示例。据我所知,spark RDD是一种特殊类型的集合,而flat map基本上可以转换嵌套集合,例如Stream> =>然后流为什么下面一行中的spark Java API需要为每一行返回一个迭代器?它是如何在RDD中使用的?

该函数不应该以Arrays.asList结尾(line.toString()。split(""))?

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

1 个答案:

答案 0 :(得分:0)

在Java API中,flatMap函数接受函数接口FlatMapFunction的对象/函数,其合约(调用函数)将返回迭代器:

  

java.util.Iterator的< R>通话(T t)                       抛出异常

将此与scala flatMap进行比较  你会看到类似的东西就是那里的语法。但作者已经能够使用scala的implicit功能实现它,以便用户友好。

Iterator< DiffObject>一旦理解map应该返回完全相同数量的可能属于不同类型的项目,就会有意义flatMap。但是,{{1}}可以返回任何数字(包括0)的元素,而不是输入也可以是不同类型的元素。在内部,实现将使用您提供的lambda,通过组合这些迭代器的输出来获取最终列表。