在AWS Glue中读写MYSQL

时间:2018-12-29 11:40:02

标签: amazon-web-services pyspark pyspark-sql aws-glue aws-glue-data-catalog

enter image description here我可以在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()

2 个答案:

答案 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)

请参阅“ AWS Glue连接”部分: enter image description here

答案 1 :(得分:0)

是的,我可以通过将连接添加到作业以及将本地主机更改为相应的

来如上所述进行连接