Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不使用collect函数的情况下有效地将rdd转换为list_Java_Scala_Apache Spark_Spark Streaming - Fatal编程技术网

Java 如何在不使用collect函数的情况下有效地将rdd转换为list

Java 如何在不使用collect函数的情况下有效地将rdd转换为list,java,scala,apache-spark,spark-streaming,Java,Scala,Apache Spark,Spark Streaming,我们知道,如果需要将RDD转换为列表,那么应该使用collect()。但是这个函数给驱动程序带来了很大的压力(因为它会将来自不同执行器的所有数据带给驱动程序),这会导致性能下降或更糟(整个应用程序可能会失败) 有没有其他方法可以在不使用collect()或collectAsMap()等的情况下将RDD转换为任何java util集合而不会导致性能下降 基本上,在当前的场景中,我们在批处理或流数据处理中处理大量数据,像collect()和collectAsMap()这样的API在实际的项目中已经完

我们知道,如果需要将RDD转换为列表,那么应该使用collect()。但是这个函数给驱动程序带来了很大的压力(因为它会将来自不同执行器的所有数据带给驱动程序),这会导致性能下降或更糟(整个应用程序可能会失败)

有没有其他方法可以在不使用collect()或collectAsMap()等的情况下将RDD转换为任何java util集合而不会导致性能下降

基本上,在当前的场景中,我们在批处理或流数据处理中处理大量数据,像collect()和collectAsMap()这样的API在实际的项目中已经完全无用了。我们可以在演示代码中使用它,但这些API都可以使用它。那么,为什么要有一个我们甚至不能使用的API(或者我遗漏了什么)

有没有更好的方法可以通过其他方法实现相同的结果,或者我们可以通过调用

List myList=RDD.collect.toList
(影响性能)


我查阅了谷歌,但找不到任何有效的方法。如果有人有更好的方法,请提供帮助。

因为您希望在Java集合中收集数据,所以数据必须在单个JVM上收集,因为Java集合不会被分发。无法通过不获取数据来获取集合中的所有数据。对问题空间的解释是错误的

有没有其他方法可以在不使用collect()或collectAsMap()等的情况下将RDD转换为任何java util集合而不会导致性能下降

不,不可能。如果有这样一种方法,
collect
将首先使用它来实现

从技术上讲,您可以在
RDD
(或者大部分?)之上实现
List
接口,但这是一个坏主意,而且毫无意义

那么,为什么要有一个我们甚至不能使用的API(或者我遗漏了什么)


collect
用于只有大型RDD作为输入或中间结果,且输出足够小的情况。如果不是您的情况,请使用
foreach
或其他操作。

collect
和类似操作不适用于正常的spark代码。它们在调试、测试以及在某些情况下处理小型数据集时非常有用


您需要将数据保存在rdd中,并使用rdd转换和操作,而无需取出数据。像
collect
这样的方法会将数据从spark中提取出来,然后放到驱动程序中,这样会破坏spark可能提供的任何优势,因为现在您在一台机器上处理所有数据。

我理解这个问题。我的问题是,由于这个问题,collect()不适合用于处理大量数据的地方。因此,我只是想了解是否有任何解决方法。请解释您希望通过收集的结果实现的目标?正如我从您的问题陈述中了解到的,您希望在Java集合中获取没有其他替代方法的记录。如果你有其他目标,可能会有更好的解决方案。