在linux下,執行pyspark代碼 —— 實測有效:但是並不是所有的包都能夠成功,一些很復雜的包或者對C依賴很深的包例如 numpy, pandas, scipy等,無法通過本方法實現,實現可以參考https://www.cnblogs.com/qi-yuan-008/p/12199152.html;對一些比較簡單的 第三方site-packages包,本方法則可以實現。
1. 安裝pycharm或者spyder,然后在其中編寫代碼和執行語句
2. 通過job來提交,即spark-submit提交,下面主要講這種方法
首先假設,自己寫的 *.py 文件包含了這些包,即通過import導入
import os from pyspark import SparkContext from pyspark.sql.session import SparkSession from pyspark.sql import HiveContext import jieba from collections import Counter from operator import itemgetter import time import ast from pyspark.sql.types import StructField, StructType, StringType from pyspark.sql import SQLContext
3. 那么利用spark-submit提交時,就需要將需要的包全部打包在一個zip文件中,注意的是:需要的包要先在同一個目錄下,然后在該目錄一起打包成zip文件,例如在有以上包的情形下,可以:
第一:建立一個文件夾,來存放所有包:
mkdir lib_words
第二:復制所需的包(一般都在python的安裝目錄的lib下,其中第三方庫在site-packages里面)到該文件夾下,因為一個個選比較麻煩,所以就一起打包了,但是並未復制和打包pyspark庫的包
cp -r /usr/local/python3.7/lib/python3.7/* /home/lib_words
cp -r /usr/local/python3.7/lib/python3.7/site-packages/* /home/lib_words
第三:打包zip
zip -r /home/lib_words.zip ./*
4. 在命令行,使用spark-submit提交 *.py主文件,並使用參數 '--py-files' 導入zip文件,然后回車執行
spark-submit /home/pycharm_projects/cut_words/cut_words_fre.py --py-files='/home/lib_words.zip'
附加:首先通過在程序里面直接寫入pyFiles參數(在SparkContext的參數中),然后直接提交運行:spark-submit /home/pycharm_projects/cut_words/cut_words_fre.py,實測也可
pyFiles=["/home/lib_words.zip"]#壓縮的包的所在路徑,可行 #pyFiles=["/home/test1.py","/home/test2.py"] #據說也可,但是因為文件太多,沒有測試 sc = SparkContext('local', 'test', pyFiles=pyFiles)
結果最后,其中有一行會出現:
19:55:06 INFO spark.SparkContext: Successfully stopped SparkContext
附加2:通過 sc.addPyFile 方法也可以實現 (推薦)
sc = SparkContext('local', 'test') sc.addPyFile(r'/root/test_words/lib_words.zip')
注:如果只有pyspark的包,可能不需要加入 *.zip 文件(未測試)
參考:
https://blog.csdn.net/lmb09122508/article/details/84586947