pyspark对Mysql数据库进行读写的实现


Posted in Python onDecember 30, 2020

pyspark是Spark对Python的api接口,可以在Python环境中通过调用pyspark模块来操作spark,完成大数据框架下的数据分析与挖掘。其中,数据的读写是基础操作,pyspark的子模块pyspark.sql 可以完成大部分类型的数据读写。文本介绍在pyspark中读写Mysql数据库。

1 软件版本

在Python中使用Spark,需要安装配置Spark,这里跳过配置的过程,给出运行环境和相关程序版本信息。

  • win10 64bit
  • java 13.0.1
  • spark 3.0
  • python 3.8
  • pyspark 3.0
  • pycharm 2019.3.4

2 环境配置

pyspark连接Mysql是通过java实现的,所以需要下载连接Mysql的jar包。

下载地址

pyspark对Mysql数据库进行读写的实现

选择下载Connector/J,然后选择操作系统为Platform Independent,下载压缩包到本地。

pyspark对Mysql数据库进行读写的实现

然后解压文件,将其中的jar包mysql-connector-java-8.0.19.jar放入spark的安装目录下,例如D:\spark\spark-3.0.0-preview2-bin-hadoop2.7\jars

pyspark对Mysql数据库进行读写的实现

环境配置完成!

3 读取Mysql

脚本如下:

from pyspark.sql import SQLContext, SparkSession

if __name__ == '__main__':
  # spark 初始化
  spark = SparkSession. \
    Builder(). \
    appName('sql'). \
    master('local'). \
    getOrCreate()
  # mysql 配置(需要修改)
  prop = {'user': 'xxx', 
      'password': 'xxx', 
      'driver': 'com.mysql.cj.jdbc.Driver'}
  # database 地址(需要修改)
  url = 'jdbc:mysql://host:port/database'
  # 读取表
  data = spark.read.jdbc(url=url, table='tb_newCity', properties=prop)
  # 打印data数据类型
  print(type(data))
  # 展示数据
  data.show()
  # 关闭spark会话
  spark.stop()
  • 注意点:
  • prop参数需要根据实际情况修改,文中用户名和密码用xxx代替了,driver参数也可以不需要;
  • url参数需要根据实际情况修改,格式为jdbc:mysql://主机:端口/数据库
  • 通过调用方法read.jdbc进行读取,返回的数据类型为spark DataFrame;

运行脚本,输出如下:

pyspark对Mysql数据库进行读写的实现

4 写入Mysql

脚本如下:

import pandas as pd
from pyspark import SparkContext
from pyspark.sql import SQLContext, Row

if __name__ == '__main__':
  # spark 初始化
  sc = SparkContext(master='local', appName='sql')
  spark = SQLContext(sc)
  # mysql 配置(需要修改)
  prop = {'user': 'xxx',
      'password': 'xxx',
      'driver': 'com.mysql.cj.jdbc.Driver'}
  # database 地址(需要修改)
  url = 'jdbc:mysql://host:port/database'

  # 创建spark DataFrame
  # 方式1:list转spark DataFrame
  l = [(1, 12), (2, 22)]
  # 创建并指定列名
  list_df = spark.createDataFrame(l, schema=['id', 'value']) 
  
  # 方式2:rdd转spark DataFrame
  rdd = sc.parallelize(l) # rdd
  col_names = Row('id', 'value') # 列名
  tmp = rdd.map(lambda x: col_names(*x)) # 设置列名
  rdd_df = spark.createDataFrame(tmp) 
  
  # 方式3:pandas dataFrame 转spark DataFrame
  df = pd.DataFrame({'id': [1, 2], 'value': [12, 22]})
  pd_df = spark.createDataFrame(df)

  # 写入数据库
  pd_df.write.jdbc(url=url, table='new', mode='append', properties=prop)
  # 关闭spark会话
  sc.stop()

注意点:

propurl参数同样需要根据实际情况修改;

写入数据库要求的对象类型是spark DataFrame,提供了三种常见数据类型转spark DataFrame的方法;

通过调用write.jdbc方法进行写入,其中的model参数控制写入数据的行为。

model 参数解释
error 默认值,原表存在则报错
ignore 原表存在,不报错且不写入数据
append 新数据在原表行末追加
overwrite 覆盖原表

5 常见报错

Access denied for user …

pyspark对Mysql数据库进行读写的实现

原因:mysql配置参数出错
解决办法:检查user,password拼写,检查账号密码是否正确,用其他工具测试mysql是否能正常连接,做对比检查。

No suitable driver

pyspark对Mysql数据库进行读写的实现

原因:没有配置运行环境
解决办法:下载jar包进行配置,具体过程参考本文的2 环境配置

到此这篇关于pyspark对Mysql数据库进行读写的实现的文章就介绍到这了,更多相关pyspark Mysql读写内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python EOL while scanning string literal问题解决方法
Sep 18 Python
Python实现文件按照日期命名的方法
Jul 09 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
Nov 07 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
Mar 19 Python
Python文本相似性计算之编辑距离详解
Nov 28 Python
Python matplotlib画图实例之绘制拥有彩条的图表
Dec 28 Python
python入门前的第一课 python怎样入门
Mar 06 Python
python操作mysql代码总结
Jun 01 Python
python format 格式化输出方法
Jul 16 Python
Python FtpLib模块应用操作详解
Dec 12 Python
Python面向对象封装操作案例详解
Dec 31 Python
python文件路径操作方法总结
Dec 21 Python
python实现无边框进度条的实例代码
Dec 30 #Python
python中的列表和元组区别分析
Dec 30 #Python
python实现xml转json文件的示例代码
Dec 30 #Python
python实现KNN近邻算法
Dec 30 #Python
python 实现逻辑回归
Dec 30 #Python
Python 随机按键模拟2小时
Dec 30 #Python
Python的scikit-image模块实例讲解
Dec 30 #Python
You might like
如何在PHP程序中防止盗链
2008/04/09 PHP
php+xml编程之xpath的应用实例
2015/01/24 PHP
Zend Framework教程之模型Model用法简单实例
2016/03/04 PHP
php微信公众平台配置接口开发程序
2016/09/22 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
基于jQuery的Tab选项框效果代码(插件)
2011/03/01 Javascript
jquery实现滑动特效代码
2015/08/10 Javascript
Bootstrap模态对话框的简单使用
2016/04/29 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
看看“疫苗查询”小程序有温度的代码
2018/07/31 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
Jquery获取radio选中值实例总结
2019/01/17 jQuery
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
浅谈layui 数据表格前后台传值的问题
2019/09/12 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
基于JavaScript伪随机正态分布代码实例
2019/11/07 Javascript
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
python中精确输出JSON浮点数的方法
2014/04/18 Python
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
Python List列表对象内置方法实例详解
2019/10/22 Python
Python调用Windows命令打印文件
2020/02/07 Python
客运企业隐患排查工作方案
2014/06/06 职场文书
艺术学院毕业生自荐信
2014/07/05 职场文书
经验交流材料格式
2014/12/30 职场文书
打架检讨书范文
2015/01/27 职场文书
工作会议通知
2015/04/15 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书
MySQL 百万级数据的4种查询优化方式
2021/06/07 MySQL