作者:赵丶宇森 | 来源:互联网 | 2023-08-27 10:58
Spark是大数据中的数据处理大杀器,凭借快速的处理速度,简易的上手,把MapReduce等传统处理方式甩了几条街不止。Spark支持JavaRPythonR,特别是Python的
Spark是大数据中的数据处理大杀器,凭借快速的处理速度,简易的上手,把MapReduce等传统处理方式甩了几条街不止。Spark支持Java/R/Python/R,特别是Python的Spark编程尤为简单快捷。
但pyspark的数据处理后,需要写入 mysql进行数据落地,如何办?
一.需要提交spark时候,加入mysql-connect jar
bin/spark-submit –master yarn-client –num-executors 5 –executor-cores 20 –executor-memory 20g –jars /usr/hdp/2.4.2.0-258/sqoop/lib/mysql-connector-java.jar /opt/spark-2.1.0-bin-hadoop2.7/dig.py
备注下,执行的python程序次序不能错。不然居然找不到mysql驱动。
二.写入的python程序如下:
df.write.jdbc(url="jdbc:mysql://10.0.0.03:3306/test"
"?user=test&password=test123",
mode="append",
table="test",
properties={"driver": 'com.mysql.jdbc.Driver'})
备注下:
1.df是要写入的数据集,类似于R中的dataframe
2.mode是表明是否追加数据,否则创建新表
3.table指定插入的mysql表
4.url是mysql的链接参数。
三.开始执行
用了6个container,133G内存
感觉不错。很快就执行完毕,然后插入mysql了。
打开mysql,一看记录。傻眼,里面都是乱码。
经过不断摸索,终于搞定。
办法是先创建mysql的表编码类型是 GBK,然后改动PySpark的程序,让用GBK的方式来写入,并且是追加方式。
四.解决的办法
mysql>CREATE TABLE test( ….) ENGINE=InnoDB DEFAULT CHARSET=GBK;
改动pySpark代码:
df.write.jdbc(url="jdbc:mysql://10.0.0.3:3306/test"
"?user=test&password=test123&useUnicode=true&characterEncoding=GBK",
mode="append",
table="test",
properties={"driver": 'com.mysql.jdbc.Driver'})
终于,也就是程序写入和存储都是GBK,问题得解。