当前位置: 首页 > 知识库问答 >
问题:

联合减少JDBC读取并行性

袁鹤轩
2023-03-14

我利用SparkJDBC功能如下:

    < li >将< code>MySQL表读入< code>DataFrame < li >改造他们 < li >合并它们 < li >写给< code>HDFS

DataFrame的整个生命周期中,没有对其执行操作s。它曾经像预期的那样工作,但最近我遇到了问题。由于Spark的延迟求值,合并导致读取操作的并行性降低。

因此,如果我读取DataFrame使用DataFrameReader.jdbc(…的数字分区…)的数字分区=42,然后在写入之前将其合并到6个分区,然后它读取DataFrame,并发量仅为6(只触发6个查询到MySQL)。我想重复一下,之前它使用了并行度为42的读取,然后执行coalesce

我最近在EMR 5.13上迁移到Spark 2.3.0,这可能与此相关吗?有解决方法吗?


共有1个答案

寿浩言
2023-03-14
匿名用户

由于Spark的惰性评估,合并导致读取操作的并行性降低。

这与懒惰无关合并故意不创建分析障碍:

然而,如果您正在进行剧烈的合并,例如numPartitions=1,这可能会导致您的计算在比您希望的更少的节点上进行(例如,numParttions=1的情况下只有一个节点)。为了避免这种情况,您可以调用重新分区。这将增加一个混洗步骤,但意味着当前上游分区将并行执行(根据当前分区的情况)。

因此,只需遵循文档并使用< code>repartition而不是< code>coalesce。

 类似资料:
  • 上下文:假设我有一个显示餐厅列表的应用程序 方法1:将所有餐厅添加到集合中,并将文档id保存在属于指定类别的数组中。所以,如果我想要所有的印度餐馆,我只需要获取包含所有印度餐馆Id的数组Indian,然后加载它们。 方法2:将所有餐厅添加到集合中,并为每个文档指定一个类别。因此,当用户需要印度餐馆列表时,我会使用where()将其过滤掉。在这种方法中,firestore是否会为所有100000次文

  • 我们目前在Firebase上使用免费层,其中包含50k读取和20k写入操作配额。 每天大约有100名用户,我们的读取操作已经超过了配额。Firestore的结构如下所示: 该应用程序将显示按步骤数排序的用户列表。 因此,作为一个简单的计算,在每次应用程序启动时,如果等于集合中存储的用户条目数,则应读取代表读取操作的文档。对于打开应用程序的100个用户和100个用户条目,应该已经有10100次读取操

  • 问题内容: 我想减少阅读次数,以便从(问题数组)中获取问题的详细信息。 我的应用程序就像stackoverflow的一部分一样工作 。 我想说明 一个问题有 多少 顶,观点和评论 。因此,为了处理这个问题,我创建了多个集合,例如 问题集 ID 标题 创建日期 评论集 ID 评论 创建日期 问题喜欢 QuestionID 用户身份 QuestionViews QuestionID 用户身份 问题标签

  • 我的applet已经可以读取存储在jar中的excel文件,但是要读取excel文件,我必须使用其他5个jar(DOM4J-2.0.0-alpha-2、POI-3.9-20121203、POI-OOXML-3.9-20121203、POI-OOXML-Schemas-3.9-20121203、xbean),总共10.1mb,不包括实际的applet jar(1.36mb)。这些需要一段时间来下载,

  • 我有一个火花作业,它管理上的。 我的问题是它会生成很多文件,包括 95% 的空 avro 文件。我尝试使用合并来减少RDD上的分区数量,从而减少输出文件的数量,但它没有效果。 我想分区配置和分区之间丢失了一些东西,也许没有考虑到它,但我不确定。 我错过了什么吗? 有人能解释一下根据rdd分区调用时真正附加的内容吗?

  • 问题内容: 我有一个大文件,需要阅读并制作字典。我希望尽快。但是我在python中的代码太慢了。这是显示问题的最小示例。 首先制作一些假数据 现在,这里是一个最小的python代码片段,可以读入它并制作一个字典。 时间: 但是,可以更快地读取整个文件,如下所示: 我的CPU有8个核心,是否可以在python中并行化此程序以加快速度? 一种可能是读取大块输入,然后在不同的非重叠子块上并行运行8个进程