最近在學習中,須要用spark讀取mysql數據,查閱了不少資料大可能是java版本的,本身琢磨了半天,研究出python版本的,本人菜鳥,本博客只會記錄學習過程,若有不妥請見諒。所用spark版本爲1.4.1.
html
先上本身找到了一些相關資料,僅供參考~~~java
http://www.thebigdata.cn/QiTa/15471.htmlpython
http://www.iteblog.com/archives/1560mysql
官方文檔中 http://spark.apache.org/docs/1.4.1/sql-programming-guide.htmlsql
有介紹Spark SQL與hive,json等數據的讀寫。而mysql等一些數據庫可經過JDBC來讀取。數據庫
from pyspark import SparkContext from pyspark.sql import SQLContext,Row sqlContext=SQLContext(sc) df=sqlContext.read.format('jdbc').options(url="jdbc:mysql://localhost/spider_db?user=spider_user&password=password",dbtable="allpapers").load()
或:apache
from pyspark import SparkContext from pyspark.sql import SQLContext,Row sqlContext=SQLContext(sc) df=sqlContext.read.jdbc(url="jdbc:mysql://localhost?user=spider_user&password=password",table="spider_db.allpapers")
url含義:json
url=jdbc:mysql://MYSQL_HOST/MYSQL_DBNAME?user=MYSQL_USER&password=MYSQL_PASSWD」,dbtable=」MYSQL_TABLE」ide
MYSQL_HOST爲mysql的地址,本機爲localhost,MYSQL_DBNAME爲數據庫名,MYSQL_USER爲用戶名,MYSQL_PASSW爲登錄密碼,MYSQL_TABLE爲表名。MYSQL_DBNAME可放入url中,也可放入table中。oop
所遇到的錯誤狀況有一下兩種:
1.java.sql.SQLException: No suitable driver found for ...
解決辦法:下載mysql-connector包,將其放到spark下,並指定jar包,即在spark-env.sh中添加
export SPARK_CLASSPATH=$SPARK_CLASSPATH:/usr/hadoop/spark/lib/mysql-connector-java-5.1.36-bin.jar
2.java.sql.SQLException: access denied for user'spider_user '@'**.**.**.**'(using password :Yes)
解決辦法:mysql的密碼輸入錯誤,正確書寫mysql密碼。