pyspark的 Mysql寫入

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,問題得解。

推薦閱讀:

寫給菜鳥和老鳥,mysql5.6、5.7如何飛速安裝
使用explain語句查詢索引查詢索引是否在使用
GitHub開源的MySQL在線更改Schema工具
MySql必知必會筆記
2017年MySQL資料庫技術嘉年華 —— 有態度的技術大會

TAG:Spark | MySQL | 大数据 |