apache-spark - 合并减少 JDBC 读取并行度

标签 apache-spark

我利用 SparkJDBC 功能,如下所示:

  • MySQL 表读取到 DataFrame
  • 改造它们
  • 合并它们
  • 将它们写入HDFS

DataFrame 的整个生命周期中,不会对其执行任何操作。它曾经按预期工作,但最近我遇到了问题。由于 Spark惰性求值合并导致读取操作的并行性减少。


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

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

最佳答案

Thanks to Spark's lazy evaluation, the coalesce is resulting in reduced parallelism of read operation.

这与懒惰无关。 coalesce 故意不创建 analysis barrier :

However, if you're doing a drastic coalesce, e.g. to numPartitions = 1, this may result in your computation taking place on fewer nodes than you like (e.g. one node in the case of numPartitions = 1). To avoid this, you can call repartition. This will add a shuffle step, but means the current upstream partitions will be executed in parallel (per whatever the current partitioning is).

因此,只需遵循文档并使用repartition而不是coalesce即可。

关于apache-spark - 合并减少 JDBC 读取并行度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49891929/

相关文章:

java - [spark-cassandra-connector]如何在spark 2.3.1中将scala隐式支持的代码转换为java

apache-spark - 在源中没有分隔符的情况下将数据加载到Spark Dataframe

java - 如何使用 Java 有效地读取 Hadoop (HDFS) 文件中的第一行?

java - 如何对Java Spark RDD执行标准差和均值运算?

apache-spark - 如何获得 2 个不同的普罗米修斯指标之间的差异?

java - Spark sql 连接 mongo-spark 和 Spark-redshift 连接器的性能问题

java - 如何完全驱逐Spark中的持久 "Stream Blocks"

sql-server - zeppelin-ms sql server 解释器

java - pyspark 无法识别 spark.read.load() 中 1989Dec31 和 31Dec1989 等日期的 MMM dateFormat 模式

apache-spark - 使用PySpark从MariaDB读取查询