我们知道,如果需要将RDD转换为列表,则应使用collect()。但是此功能给驱动程序带来了很大的压力(因为它将所有数据从不同的执行程序带到驱动程序),从而导致性能下降或恶化(整个应用程序可能会失败)。
是否有其他方法可以在不使用collect()或collectAsMap()等的情况下将RDD转换为任何Java util集合,而这不会导致性能下降?
基本上,在当前以批处理或流数据处理方式处理大量数据的情况下,像collect()和collectAsMap()这样的API在具有大量数据的实际项目中已变得完全无用。我们可以在演示代码中使用它,但这就是这些API的全部使用。那么为什么要拥有一个我们甚至无法使用的API(或者我错过了什么)。
是否有更好的方法可以通过其他方法来达到相同的结果,或者我们可以以更有效的方式实现collect()和collectAsMap(),而不仅仅是调用
List<String> myList= RDD.collect.toList (影响效果)
List<String> myList= RDD.collect.toList
我抬头看谷歌,但找不到任何有效的方法。如果有人有更好的方法,请提供帮助。
不,不可能。如果有这种方法,collect将首先使用它来实现。
collect
好吧,从技术上讲,您可以List在RDD(或大多数?)之上实现接口,但这将是一个坏主意,而且毫无意义。
List
RDD
那么为什么要拥有一个我们甚至无法使用的API(或者我错过了什么)。
collect旨在用于仅大RDD是输入或中间结果而输出足够小的情况。如果不是您这种情况,请改用foreach或其他动作。
foreach