当前位置: 首页 > 面试题库 >

如何在不使用收集功能的情况下有效地将rdd转换为列表

蓟辰沛
2023-03-14
问题内容

我们知道,如果需要将RDD转换为列表,则应使用collect()。但是此功能给驱动程序带来了很大的压力(因为它将所有数据从不同的执行程序带到驱动程序),从而导致性能下降或恶化(整个应用程序可能会失败)。

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

基本上,在当前以批处理或流数据处理方式处理大量数据的情况下,像collect()和collectAsMap()这样的API在具有大量数据的实际项目中已变得完全无用。我们可以在演示代码中使用它,但这就是这些API的全部使用。那么为什么要拥有一个我们甚至无法使用的API(或者我错过了什么)。

是否有更好的方法可以通过其他方法来达到相同的结果,或者我们可以以更有效的方式实现collect()和collectAsMap(),而不仅仅是调用

List<String> myList= RDD.collect.toList (影响效果)

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


问题答案:

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

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

好吧,从技术上讲,您可以ListRDD(或大多数?)之上实现接口,但这将是一个坏主意,而且毫无意义。

那么为什么要拥有一个我们甚至无法使用的API(或者我错过了什么)。

collect旨在用于仅大RDD是输入或中间结果而输出足够小的情况。如果不是您这种情况,请改用foreach或其他动作。



 类似资料:
  • 假设我有一个未来对象的列表<代码>列表 但此方法必须等待所有期货返回,然后才能返回流 我想让它像管道一样工作,上层从流中提取数据并根据需要进行处理,无需等待所有的未来完成。

  • 问题内容: 我有一个字符串,是这样的:。 我想将其转换为列表。我知道我可以使用eval(string)来获取列表,但是eval令我感到恐惧,因为它可能会造成灾难(并且因为我可以获取非列表作为有效输出)。还有另一种更安全的方式将此字符串转换为列表吗?我知道这是一个列表,所有不是列表的数据都是无效数据(应该检查和/或抛出错误)。 问题答案: 如果您坚持要这样做,可以使用ast.literal_eval

  • 我在用org。乔达。时间LocalDate和LocalDateTime。我从外部源获得一个Unix时间戳,并希望从中生成一个LocalDate(时间)。关键是,在该外部系统的界面中定义,所有日期/时间都在UTC时区内。因此,我希望避免从该时间戳到本地系统的任何默认时区的任何隐式转换,这可能与UTC不同。有一个LocalDateTime的构造器用于这些事情,所以我尝试(作为一个例子): 结果让我有点

  • 所以我试图生成一个数组,其中填充了唯一的随机整数,我发现用arraylist来实现这一点是最有效的方法。 现在我试着使用但我不太确定括号里应该放什么,也不确定这是否真的能起作用。有没有其他转换方法,因为我不能简单地通过。

  • 问题内容: 我需要一个解决方案将String转换为字节数组,而无需像这样更改: 输入: 输出: 当我使用 那么回复是 但我希望回复是 问题答案: 您应始终确保序列化和反序列化使用相同的字符集,这会将字符映射到字节序列,反之亦然。默认情况下,String.getBytes()和新的String(bytes)使用默认字符集,该字符集可能是特定于语言环境的。 使用getBytes(Charset)重载

  • 问题内容: 我有个问题。我正在尝试将一些字符串转换为日期,但我不知道日期到达的格式。 这或许让他们或等。 如何将这些字符串转换为Date?我尝试了这个: 但是,当我打印出someDate时,它的打印方式是这样的:2019-08-05 12:42:48.638 CEST这意味着,但是当我运行以上代码时,日期对象现在变成了,至少可以这样说。 有什么想法可以正确格式化日期格式吗? 问题答案: 你不能!