0

在此处输入图像描述我可以在 juypter 笔记本中本地运行我的 Pyspark 代码时连接到 MYSQL,但是在运行代码时我在 AWS Glue 中遇到通信错误。在 AWS Glue 中创建作业时,我在所需的 jar 文件中添加了 MySQL jar。

从 MYSQL 读取

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()

写入 MYSQL

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()
4

2 回答 2

0

请注意,您必须提供有效的数据库 URL,而不是本地主机。我相信你的 jupyter notebook 是在笔记本电脑上本地运行的,在你的 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)

请参阅 AWS Glue 连接部分: 在此处输入图像描述

于 2018-12-30T11:12:55.113 回答
0

是的,这是真的,我只需将连接添加到作业以及将本地主机更改为相应的

于 2019-01-03T17:06:13.643 回答