檔案import問題
問題: 在指令碼中import了其他檔案, pyspark中可以執行, 但是在spark-submit中總是失敗
假定我們的任務指令碼為 app.py , 大體程式碼像這樣:
from pyspark import SparkContext ## 載入通用指令碼 import common # # ......... # if __name__ == "__main__": sc = SparkContext(appName="ACoolApp") # # run #
公用函式的放到了 common.py 檔案中. 通過 --py-files 可以在pyspark中可以順利匯入:
# success pyspark --py-files lib/common.py > import common
而使用spark-submit來提交 app.py 2881064151總是失敗
# import error spark-submit --py-files lib/common.py app.py
找了好久的解決辦法, 最後參考了 這裡 . 簡單來說, 所有的import操作必須在context完成之後. pyspark之所以不報錯就是因為context已經初始化好了. 所以我們簡單改下 app.py 中import的位置就可以了:
if __name__ == "__main__": sc = SparkContext(appName="ACoolApp") import common
資料儲存至mysql中
問題: 將資料寫入mysql
這裡不多說, 方法可以直接參考 這裡 . 關鍵點有兩個:
引入mysql的jdbc jar包 設定好對應的的driver, 否則會報 park python java.sql.SQLException: No suitable driver 的錯誤
直接來個程式碼片段:
url = 'jdbc:mysql://%s/%s' % (db_host, db_name) properties = { 'user': db_username, 'password': db_password, 'driver': 'com.mysql.jdbc.Driver', } records.write.jdbc(url=url, table=db_table, mode='append', properties=properties)
最後