Pyspark和MySQL建立连接,并插入数据

spark连接数据库在前面有提到过,在这里就不多说了,接下来就说下使用刚和大家讲过的pyspark连接数据库,以MySQL为例,确认已经安装好了MySQL数据库在windows系统和linux下,假设数据库名叫test,表名叫student,mysql驱动包可以到官网取下,也可以到本地maven库中去拷贝,这些都不是重点,重点是要把驱动包放哪?

驱动存放位置
在Windows系统下放驱动包的地方已经和大家说过,其实在Linux系统下放驱动包的地方有点类似,也是找到安装jdk的目录,放在下面的\jre\lib\ext目录下,而不是放在jar目录下。

先说下在Linux系统下使用pyspark连接数据库
如何安装pyspark前面已经和大家说过,还没安装过的可以再去看看Pyspark简介及详细安装,启动pyspark,后,打开jupyter进行操作

查询表student中的数据:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("test").master("local[*]").getOrCreate()

spark.read.format("jdbc").options(
url = "jdbc:mysql://192.168.5.150:3306/test?user=root&password=1234",dbtable=“student”
).load().show(5)

在pycharm下使用pyspark连接数据库

驱动包的存放位置我就不多说了,首先导pyspark的包,如何下载pyspark的包我就不多说了,前面也已经说过,下载好以后一样开始导包,并建立连接:

查询表student中的数据:

from pyspark.sql import SparkSession

if __name__ == '__main__':   
    spark = SparkSession.builder.appName("test").master("local[*]").getOrCreate()
	
    dt = spark.read.format("jdbc").options(
         url="jdbc:mysql://192.168.5.150:3306/test?user=root&password=1234", dbtable="student"

    ).load()
    dt.show(5)

插入数据到MySQL
一样先导包:

from pyspark.sql.types import Row
from pyspark.sql.types import StructType
from pyspark.sql.types import StructField
from pyspark.sql.types import StringType
from pyspark.sql.types import IntegerType



studentRDD = spark.sparkContext.parallelize(["3 zhangsanfeng M 21","4 lisi M 33"]).map(lambda line : line.split(" "))

schema = StructType([
		    StructField("name", StringType(), True),
		    StructField("gender", StringType(), True),
		    StructField("age",IntegerType(), True)
		    ])

rowRDD = studentRDD.map(lambda p : Row(p[1].strip(), p[2].strip(),int(p[3])))

studentDF = spark.createDataFrame(rowRDD, schema)

prop = {}
prop['user'] = 'root'
prop['password'] = '1234'
prop['driver'] = "com.mysql.jdbc.Driver"
studentDF.write.jdbc("jdbc:mysql://localhost:3306/test",'student','append', prop)

执行完上述程序后,在到MySQL数据库中查看,就能看到数据已经插入进来了。

注意:
最关键的是,很多人都会犯一个错误,就是容易直接去下mysql-connector-python这个包,其实是没用的,必须要把加载的驱动放到前面所说的\jre\lib\ext目录下才能生效,,已经入坑的朋友希望能帮你们脱坑!

猜你喜欢

转载自blog.csdn.net/zp17834994071/article/details/108307822