栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何从spark设置和获取静态变量?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何从spark设置和获取静态变量?

好的,基本上有两种方法可以将执行者已知的值带给执行者:

  1. 将值放在闭包中,然后序列化到执行程序以执行任务。这是最常见的一种,非常简单/优雅。示例和文档 在这里
  2. 用数据创建一个广播变量。这对于大容量的不可变数据很有用,因此您要保证仅发送一次。如果反复使用相同的数据,也很好。示例和文档 在这里

两种情况下都无需使用静态变量。但是,如果您确实想在执行程序VM上使用静态值,则需要执行以下操作之一:

  1. 如果值是固定的,或者在执行程序节点上可用配置(位于jar内等),则可以有一个惰性val,仅保证一次初始化。
  2. 您可以使用上面两个选项之一使用代码调用mapPartitions(),然后将值存储在静态变量/对象中。保证mapPartitions对于每个分区仅运行一次(比每行一次好得多),并且对于这种情况(初始化数据库连接等)很有用。

希望这可以帮助!

PS:关于您的例外:我只是在该代码示例中看不到它,所以我敢保证它发生在其他地方。


编辑以进一步澄清:惰性val解决方案只是Scala,不涉及Spark …

object MyStaticObject{  lazy val MyStaticValue = {     // Call a database, read a file included in the Jar, do expensive initialization computation, etc     4  }}

由于每个执行器都对应一个JVM,因此一旦加载了类,

MyStaticObject
便会初始化。该
lazy
关键字保证了
MyStaticValue
变量将只在首次初始化它实际上是要求,并从此保持其价值。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/507366.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号