我正在尝试浏览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());
答案 0 :(得分:0)
在Java API中,flatMap函数接受函数接口FlatMapFunction的对象/函数,其合约(调用函数)将返回迭代器:
java.util.Iterator的< R>通话(T t) 抛出异常
将此与scala flatMap进行比较
你会看到类似的东西就是那里的语法。但作者已经能够使用scala的implicit
功能实现它,以便用户友好。
Iterator< DiffObject>
一旦理解map
应该返回完全相同数量的可能属于不同类型的项目,就会有意义flatMap
。但是,{{1}}可以返回任何数字(包括0)的元素,而不是输入也可以是不同类型的元素。在内部,实现将使用您提供的lambda,通过组合这些迭代器的输出来获取最终列表。