Spark 执行器上的对象缓存

2024-03-28

对于 Spark 专家来说,这是一个很好的问题。

我正在处理数据map操作(RDD)。在映射器函数中,我需要查找类的对象A用于处理 RDD 中的元素。

由于这将在执行器上执行并创建类型的元素A(将被查找)恰好是一个昂贵的操作,我想在每个执行器上预加载和缓存这些对象。最好的方法是什么?

  • 一种想法是广播查找表,但是类A不可序列化(无法控制其实现)。

  • 另一个想法是将它们加载到一个单例对象中。但是,我想控制加载到该查找表中的内容(例如,不同 Spark 作业上可能有不同的数据)。

理想情况下,我想通过驱动程序启动期间在任何操作之前可用的参数来指定将在执行器上加载一次的内容(包括流式处理的情况,以便查找表在批次之间保留在内存中)。数据得到处理。

是否有一种干净而优雅的方法来做到这一点,或者是不可能实现的?


这正是目标用例broadcast.广播变量传输一次并使用 torrent 有效地移动到所有执行器,并保留在内存/本地磁盘中,直到您不再需要它们。

在使用其他人的接口时,序列化经常会成为一个问题。如果您可以强制您使用的对象是可序列化的,那么这将是最好的解决方案。如果这是不可能的,你的生活就会变得更加复杂。如果您无法序列化A对象,那么您必须在每个任务的执行器上创建它们。如果它们存储在某个文件中,则如下所示:

rdd.mapPartitions { it => 
  val lookupTable = loadLookupTable(path)
  it.map(elem => fn(lookupTable, elem))
}

请注意,如果您使用此模型,则必须为每个任务加载一次查找表 - 您无法从广播变量的跨任务持久性中受益。

编辑:这是另一个模型,我相信它可以让您在每个 JVM 的任务之间共享查找表。

class BroadcastableLookupTable {
  @transient val lookupTable: LookupTable[A] = null

  def get: LookupTable[A] = {
    if (lookupTable == null)
      lookupTable = < load lookup table from disk>
    lookupTable
  }
}

这个类可以被广播(不传输任何实质性内容),并且第一次每个 JVM 调用它时,您将加载查找表并返回它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark 执行器上的对象缓存 的相关文章

随机推荐

  • React Native - launchPackager.command 无法打开

    我在构建 React Native ios 项目时遇到问题 错误信息 launchPackage command can t be opened because it is from an unidentified developer 知道
  • 如何充分替换 Sensor.TYPE_ORIENTATION (现已弃用)?

    我尝试了在互联网上找到的几个代码片段SensorManager getOrientation 相关讨论 没有一个能可靠地给出磁方位角 因为Sensor TYPE ORIENTATION做过 谁能分享一个工作代码Sensor TYPE ORI
  • 如何从Windows内核驱动程序获取设备实例路径?

    看一下这个示例 Windows 7 中的 USB 设备据报告具有设备实例路径 DevinstPath USB VID 1EAB PID 0501 7 25C389C1 0 1我确切地知道它对应于注册表中所谓的硬件密钥 hwkey 现在我的问
  • 为什么C中的结构体名称不是指针?

    数组名称是指针 函数名称也是指针 但结构名称不是指针 我想了解这种差异背后是否存在某种逻辑推理 或者它只是 C 语言的随机语法 数组很奇怪 他们的行为与其他类型不同 C was derived from an earlier languag
  • “AdjustJavacVersionArguments”任务意外失败

    我已经开始开发了Xamarin Forms应用在Visual Studio Enterprise 2015作为初学者 当我构建解决方案时 我收到如下错误 AdjustJavacVersionArguments 任务意外失败 严重性代码 说明
  • 验证英语文本中“a”和“an”的正确使用 - Python [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想创建一个程序 从文件中读取文本并指出 a 和 an 何时使用不正确 据我所知 一般规则是当下一个单词以元音开头时使用 an 但还应
  • Objective-C ARC 和传递 C 对象数组

    如果这是一个有点菜鸟的问题 我很抱歉 我知道我需要根据我的指示进行操作 不幸的是 我的截止日期已经到了 所以没有时间完成整本书的章节 所以我希望得到更有针对性的建议 我想在 C 数组中存储一些 Objective C 对象 我正在使用ARC
  • C# 上的 DrawString 文本太粗体

    我已经使用GDIDrawString绘制文本的方法 当程序运行时 屏幕上的文字看起来很好 但是一旦我将文件保存到图像中 字体就会比以前更粗 正常的会加粗 加粗的会更加粗 这该如何处理呢 public override void DrawTo
  • 如何在 Pug 文件中插入原始 HTML(不包括外部 HTML 文件)

    所以我想要的是将一些多行 HTML 放入 Pug 文件中 但在任何地方都找不到如何执行此操作 Example html head body div a href lala blabla a div p hihuhohoo Pug text可
  • 在本地网络中推送通知

    我需要在无法访问 Internet 的本地网络中使用我自己的服务器来实现 Android 和 iOS 的推送通知 更准确地说 我的用户将拥有一个移动应用程序 Android 和 iOS 它将通过无线网络连接到本地服务器 该网络不会有任何 I
  • Josh Smith 的 MVVM 示例中的视图是如何构建的?

    作为 WPF 和 MVVM 的新手 我正在学习Josh Smith 关于 MVVM 模式的文章 http msdn microsoft com en us magazine dd419663 aspx以及随附的示例代码 我可以看到该应用程序
  • AWS-Lambda 可以使用调用 C 的 Python 吗?

    我有一个进行图像比较的 C 库和调用它的 Python 我在 AWS Lambda 功能列表中没有看到 C 或 C 运行时 然而 Python 本身不是调用 C 的吗 我以为翻译其实是C 我们可以在 AWS Lambda 上运行从 Pyth
  • RESTful WCF Web 服务 POST 问题

    我无法将参数传递给 wcf web 服务 我的网络方法 OperationContract WebInvoke Method POST ResponseFormat WebMessageFormat Json UriTemplate pla
  • 有关 SQL Server 中重音不敏感的问题 (Latin1_General_CI_AS)

    我们所有的数据库都是使用默认排序规则安装的 Latin1 General CI AS 我们计划更改排序规则 以允许客户端不区分重音地搜索数据库 问题 不区分重音的数据库有哪些负面影响 如果有的话 不区分重音的数据库是否有任何性能开销 为什么
  • 复选框不显示 Chrome - 在其他浏览器中工作

    我不确定发生了什么事 记住我 左侧应该有一个复选框 底部应该有两个测试复选框 因为我有一辆自行车 我有一辆汽车 它们在 Firefox 中显示 但在 Chrome 中不显示 我相信我有 CSS 问题 但找不到它 有人可以帮忙吗 http w
  • Python ord 函数中的多个字符

    编程初学者在这里 Python 2 7 是否有解决方法可以在 Python 的 ord 函数中使用多个字符 例如 我有一个十六进制字符串 xff x1a 我想要它的十进制值 以便我可以将其与其他十六进制字符串求和 但是 ord 只接受单个十
  • 在C中从键盘获取输入而不用“return”

    在 C Mac OS 中 如何在不按 return 的情况下从键盘获取输入 在带有终端的类 Unix 系统上 我认为 MacOS X 符合要求 那么您需要将终端设置为所谓的 cbreak 模式 重点是terminal保留数据直到按下 ret
  • 尽管导入了类,但未定义类

    我似乎遇到了一个非常令人困惑的错误 尽管导入了包含我的类的 py 文件 Python 仍然坚持认为该类实际上并不存在 testmodule py中的类定义 class Greeter def init self arg1 None self
  • 在我的 android studio 模拟器中元素相互重叠

    我是新来的Android Studio 当我创建应用程序时 所有元素都相互重叠 我不知道如何编辑这段代码 请给我详细的描述 布局编辑器和模拟器结果 布局代码
  • Spark 执行器上的对象缓存

    对于 Spark 专家来说 这是一个很好的问题 我正在处理数据map操作 RDD 在映射器函数中 我需要查找类的对象A用于处理 RDD 中的元素 由于这将在执行器上执行并创建类型的元素A 将被查找 恰好是一个昂贵的操作 我想在每个执行器上预