pyspark的 Mysql寫入
但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資料庫技術嘉年華 —— 有態度的技術大會