enter image description here我可以在juypter笔记本中本地运行Pyspark代码时连接到MYSQL,但是在运行该代码时,我在AWS Glue中遇到了通信错误。我已在AWS Glue中创建作业时在所需的jar文件中添加了MySQL jar。
dataframe_mysql = sqlContext.read.format(“ jdbc”)。option(“ url”,“ jdbc:mysql:// localhost / read”).option(“ driver”,“ com.mysql.jdbc.Driver” ).option(“ dbtable”,“ student”)。option(“ user”,“ root”)。option(“ password”,“ root”)。load()
df = sc.parallelize([[25,'Prem'],
[20, 'Kate'],
[20, 'Kate'],
[40, 'Cheng']]).toDF(["Depy_id","Dept_name"])
df.write.format('jdbc')。options(
url='jdbc:mysql://localhost/test',
driver='com.mysql.jdbc.Driver',
dbtable='dept',
user='root',
password='root').mode('overwrite').save()
答案 0 :(得分:0)
请注意,您必须提供有效的数据库URL,而不是本地主机。我相信您的jupyter笔记本是在笔记本电脑上本地运行的,并且您的mysql也在同一本地环境中运行。
AWS Glue在AWS环境中运行,并且在幕后它将根据DPU配置启动许多EC2实例。如果将URL配置为LOCALHOST,则运行pyspark代码的EC2实例将在同一节点上查找mysql数据库。
请确保您具有mysql数据库的有效公共IP,并尝试按照bdcloud的建议在AWS Glue中设置连接,然后重试。如果您不想创建连接,则可以在代码中对连接参数进行硬编码,然后重试。如果无法获得已安装的mysql数据库的公共IP,则可以尝试在AWS上设置RDS Mysql并将其用于测试。
conn = mysql.connector.connect(host=url, user=uname, password=pwd, database=dbase)
cur = conn.cursor()
insertQry = "INSERT INTO emp (id, emp_name, dept, designation, address1, city, state, active_start_date, is_active) SELECT (SELECT coalesce(MAX(ID),0) + 1 FROM atlas.emp) id, tmp.emp_name, tmp.dept, tmp.designation, tmp.address1, tmp.city, tmp.state, tmp.active_start_date, tmp.is_active from EMP_STG tmp ON DUPLICATE KEY UPDATE dept=tmp.dept, designation=tmp.designation, address1=tmp.address1, city=tmp.city, state=tmp.state, active_start_date=tmp.active_start_date, is_active =tmp.is_active ;"
n = cur.execute(insertQry)
print (" CURSOR status :", n)
答案 1 :(得分:0)
是的,我可以通过将连接添加到作业以及将本地主机更改为相应的
来如上所述进行连接