我正在AWS EMR上运行Spark应用程序。我尝试使用Spark SQL连接到MySQL数据库,如下所示:
with SparkSession.builder.appName('My test spark').getOrCreate() as spark:
dataframe_mysql = spark.read.format('jdbc').options(
url='mydb.host.com',
driver='com.mysql.cj.jdbc.Driver',
dbtable='mydb.my_table',
user='username',
password='password',
isolationLevel='NONE'
).load()
但是AWS EMR总是失败:
pyspark.sql.utils.IllegalArgumentException: requirement failed: The driver could not open a JDBC connection. Check the URL: mydb.host.com
我还根据我发现的文档尝试了不同格式的url
参数:
jdbc:mysql:mydb.host.com
jdbc:mysql://mydb.host.com
mydb.host.com
但他们都失败了相同的信息。这段代码可以成功地连接到我本地Spark集群中的MySQL。在AWS EMR中连接MySQL的正确方法是什么?或者我如何获得更具体的失败信息?
我找到了答案,argurl
的正确格式是jdbc:mysql://mydb.host.com/mydb
我使用的是emr-6.6.0和mysql-connector-java-8.0.29,我发现关于这一点有很多不同的说法,这真的让我很迷惑。也许是因为不同的版本有不同的用法?