首页 > 解决方案 > 如何使用 Apache Spark 并行读写两个 DataFrame

问题描述

我正在从 JDBC 数据源创建两个 DataFrame,然后将它们都写入 S3 存储桶。写入 S3 的文件的时间戳相隔 20 秒,这告诉我这些操作不是并行执行的。出于测试目的,从相同的数据库/表和相同数量的行加载数据。如何使读取和写入并行执行?

python 脚本在具有 2 个 DPU(标准工作器类型)的 AWS Glue 开发终端节点上运行。

df1 = spark.read.format("jdbc").option("driver", driver).option("url", url).option("user", user).option("password", password).option("dbtable", query1).option("fetchSize", 50000).load()
df2 = spark.read.format("jdbc").option("driver", driver).option("url", url).option("user", user).option("password", password).option("dbtable", query2).option("fetchSize", 50000).load()

df1.write.mode("append").format("csv").option("compression", "gzip").option("timestampFormat", "yyyy.MM.dd HH:mm:ss,SSS").option("maxRecordsPerFile", 1000000).save("s3://bucket-name/test1")
df2.write.mode("append").format("csv").option("compression", "gzip").option("timestampFormat", "yyyy.MM.dd HH:mm:ss,SSS").option("maxRecordsPerFile", 1000000).save("s3://bucket-name/test2") 

标签: apache-sparkaws-glue

解决方案


启用粘合作业的并发执行,然后在单个作业中运行该作业两次,因为 Spark 是分布式处理,所以无法并行保存数据帧。


推荐阅读