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学习资料
Feb 08 Python
用Python写冒泡排序代码
Apr 12 Python
Python+django实现简单的文件上传
Aug 17 Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 Python
深入理解python中的select模块
Apr 23 Python
Python 装饰器使用详解
Jul 29 Python
python pandas中DataFrame类型数据操作函数的方法
Apr 08 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
May 15 Python
如何用Python破解wifi密码过程详解
Jul 12 Python
python移位运算的实现
Jul 15 Python
使用python动态生成波形曲线的实现
Dec 04 Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 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
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
php中判断数组是一维,二维,还是多维的解决方法
2013/05/04 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
PHP实现多图片上传类实例
2014/07/26 PHP
PHP基于进程控制函数实现多线程
2020/12/09 PHP
JavaScript入门教程 Cookies
2009/01/31 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
JavaScript三元运算符的多种使用技巧
2015/04/16 Javascript
13个PHP函数超实用
2015/10/21 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
2016/05/27 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
Ionic2调用本地SQlite实例
2017/04/22 Javascript
iscroll动态加载数据完美解决方法
2017/07/18 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
2017/10/31 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
[49:08]Secret vs VP 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
Django框架下在视图中使用模版的方法
2015/07/16 Python
python对json的相关操作实例详解
2017/01/04 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
2017/04/18 Python
tensorflow 输出权重到csv或txt的实例
2018/06/14 Python
在Python中pandas.DataFrame重置索引名称的实例
2018/11/06 Python
selenium在执行phantomjs的API并获取执行结果的方法
2018/12/17 Python
set在python里的含义和用法
2019/06/24 Python
在Matplotlib图中插入LaTex公式实例
2020/04/17 Python
pandas按条件筛选数据的实现
2021/02/20 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
俄罗斯最大的隐形眼镜销售网站:Ochkov.Net
2021/02/07 全球购物
简历的个人自我评价范文
2014/01/03 职场文书
2014年中秋节活动总结
2014/08/29 职场文书
小学优秀学生评语
2014/12/29 职场文书
反四风问题学习心得体会
2016/01/22 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
SQL Server数据库基本概念、组成、常用对象与约束
2022/03/20 SQL Server