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

如何强制Spark执行代码?

淳于博
2023-03-14
问题内容

我如何强制Spark执行对map的调用,即使它认为由于其惰性求值而无需执行该调用?

我已经尝试过cache()使用map调用了,但是仍然不能解决问题。我的地图方法实际上将结果上传到HDFS。因此,它不是无用的,但Spark认为是。


问题答案:

简短答案:

要强制Spark执行转换,您需要要求一个结果。有时,一个简单的count动作就足够了。

TL; DR:

好的,让我们回顾一下 RDD 操作

RDD支持两种类型的操作:

  • 转换 -从现有数据集中创建新数据集。
  • 动作 -在数据集上运行计算后,将值返回驱动程序。

例如,map是一个转换,该转换将每个数据集元素都传递给一个函数,并返回代表结果的新RDD。另一方面,这reduce是一个使用某些函数汇总RDD的所有元素并将最终结果返回给驱动程序的操作(尽管也有并行操作reduceByKey返回了分布式数据集)。

Spark中的所有转换都是 惰性的 ,因为 它们不会立即计算出结果

相反,他们只记得应用于某些基本数据集(例如文件)的转换。 仅当动作要求将结果 返回给驱动程序 时才计算转换
。这种设计使Spark可以更有效地运行-
例如,我们可以认识到通过map创建的数据集将用于reduce中,并且仅将reduce的结果返回给驱动程序,而不是将较大的maped数据集返回给驱动程序。

默认情况下,每次RDD您对它执行操作时,都可能会重新计算每个变换的对象。但是,您也可以RDD使用persist(或cache)方法将内存持久化在内存中,在这种情况下,Spark会将元素保留在群集中,以便下次查询时可以更快地进行访问。还支持将RDDs
持久保存在磁盘上,或在多个节点之间复制。

结论

要强制Spark执行对地图的调用,您需要要求一个结果。有时一个count动作就足够了。

参考

  • Spark编程指南。


 类似资料:
  • 我有Spark 2.1.0运行在一个有N个从节点的集群上。每个节点有16个内核(8个内核/cpu和2个cpu)和1个GPU。我想使用map进程启动一个GPU内核。由于每个节点只有1个GPU,我需要确保两个执行器不在同一个节点上(同时)尝试使用GPU,并且两个任务不会同时提交给同一个执行器。 如何强制 Spark 每个节点有一个执行程序? 我尝试了以下方法: -设置:< code > $ SPARK

  • 有时(例如用于测试和bechmark)我想强制执行在DataFrame上定义的转换。AFAIK调用像这样的操作并不能确保所有都被实际计算,可能只计算所有的子集(参见下面的示例) 我的解决方案是使用df将数据帧写入HDFS。写saveAsTable,但这会将我的系统与我不想再保留的表“混在一起”。 那么,触发数据帧评估的最佳方式是什么呢? 编辑: 请注意,最近还讨论了火花开发者列表:http://a

  • 我试图用scala编写一个udf函数,并在pyspark工作中使用它。我的数据帧模式是 我正在尝试编写一个udf函数 在这个map函数中,我试图将行强制转换为case类,但无法。我犯了这个错误。 java.lang.ClassCast异常:org.apache.spark.sql.catalyst.expressions.GenericRowwith模式不能强制转换为变量计算变量计算$myRow3

  • 问题内容: 我目前正在使用Play!1.2.2及其新的Netty客户端框架。 尽管可以使HTTP和HTTPS异步提供服务,但我没有找到一种简单的方法来强制执行SSL。有没有与Play合作的人!有直接执行SSL的方法吗?不知道我是否需要创建重定向,或者是否可以在文件中快速解决此问题。 问题答案: 有两种方法可以强制实施SSL。 首先,您可以将所有操作设置为使用该方法,例如 另一种可能也是最好的方法是

  • 一点背景:我是一个AEM项目的FE开发人员。该项目是一个SPA AEM作为云服务。我从命令行运行作者实例。 我的电脑规格是: CPU: Intel(R)Core(TM)i5-7400 CPU@3.00GHz 3.00 GHz RAM: 24.0 GB SSD: 476 GB 操作系统:Windows 10 Pro 对于我们正在使用的AEM项目 Javasdk 11 Maven 3.6.3 我已经设

  • 问题内容: 我定义了一个MySQL表: 我在这里阅读到MySQL不支持带条件的。对于每个 customerId, 我们只有一个 primaryImage = 1 。 那么我还能采取什么措施来强制执行此约束? 问题答案: 完美支持独特的约束。 但是,它不支持部分约束/索引,因此您需要使用而不是标记非主图像。 您可以将任意数量的值插入到每个客户中,但只能插入一个非空值。