如何在 AWS Glue 上通过 PySpark 使用 JDBC 驱动程序?
在我学习时,所需的步骤如下:
1 - 下载扩展名为 .jar 的 jdbc 驱动程序
2 - 保存到 S3 存储桶
3 - 在 Glue 脚本中,使用以下命令之一输入驱动程序的路径:
[opção 1] sc.addPyFile("S3://caminho para o driver no s3/mysql-connector-j-8.3.0.jar") [opção 2] spark._jsc.addJar("S3://caminho para o driver no s3/mysql-connector-j-8.3.0.jar")
由于我在 Glue 中使用与 Jupter 笔记本的交互式会话,因此我还发现可以使用 %extra__jar 魔术命令来插入 驱动程序路径。我在本地使用 Glue 环境中的图像创建了一个容器,但在本地返回的错误如下:
"java.lang.ClassNotFoundException: com.mysql.jdbc.Driver"
在胶水中,错误是:
Py4JJavaError: An error occurred while calling o103.load. : com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
4 - 我尝试使用驱动程序的方式是通过spark.read,如下所示:
spark.read \
.format("jdbc") \
.option("url", f"jdbc:mysql://{host}/?zeroDateTimeBehavior=convertToNull") \
.option("driver", "com.mysql.jdbc.Driver") \
.option("dbtable", f"({sql}) t") \
.option("user", user) \
.option("password", pwd) \
.option("fetchsize", "1000") \
.load()
我也尝试使用它来创建会话,但也没有成功:
spark = SparkSession.builder \
.appName('SparkByExamples.com') \
.config("spark.jars", "mysql-connector-java-8.0.13.jar") \
.getOrCreate()
(3)中提到的错误是在尝试使用spark.read之后发生的,之前没有错误。我也尝试使用
com.mysql.cj.jdbc.Driver
,因为我在另一个来源中看到了它的建议,但总是没有成功。
注意:
我知道可以通过平台自己的图形界面在Glue中使用本机连接器,但是您需要指定要访问的数据库,但我想访问多个数据库,所以我不相信这个连接是一个选项,即使在我看来除了使用它来创建动态帧而不是数据帧之外我不能使用它。我不知道下载驱动程序后是否应该执行其他操作,例如安装它或其他操作。因为在提到的所有情况下,我只是执行我提到的步骤。
您可以将所需的 JAR 文件上传到 S3 存储桶中。然后,在
Dependent JARs path
的
Advanced properties
部分的
Job Details
选项中指定 JAR 文件的路径
此外,请查看本文档中的AWS Glue for Spark 中 ETL 的连接类型和选项。这是一个更好的方法。