1. 程式人生 > >Spark之匯出PMML檔案(Python)

Spark之匯出PMML檔案(Python)

PMML,全稱預言模型標記語言(Predictive Model Markup Language),利用XML描述和儲存資料探勘模型,是一個已經被W3C所接受的標準。PMML是一種基於XML的語言,用來定義預言模型。詳細的介紹可以參考:http://dmg.org/pmml/v4-3/GeneralStructure.html
本文將介紹如何在Spark中匯出PMML檔案(Python語言)。
首先我們需要安裝jpmml-sparkml-package。具體的安裝細節可以參考:https://github.com/jpmml/jpmml-sparkml-package
1.利用Git下載JPMML-SparkML-Package project

git init
git clone https://github.com/jpmml/jpmml-sparkml-package.git 
cd jpmml-sparkml-package

如下圖所示:
這裡寫圖片描述
2.生成uber-JAR檔案
將Spark的Python路徑新增到環境變數

sudo gedit /etc/profile
export PYTHONPATH=$PYTHONPATH:$SPARK_HOME/python
source /etc/profile

再生成uber-JAR檔案

mvn -Ppyspark -Dpython.exe=/usr/bin/python3.5 clean package

注意這裡的python路徑要是你自己的系統裡的Python路徑。耐心等待執行,執行結果如下:
這裡寫圖片描述
這時jpmml-sparkml-package資料夾下會多出target資料夾,如下:
這裡寫圖片描述
3.將上述的jpmml_sparkml-1.3rc0-py3.5.egg檔案新增到Eclipse的Pydev的libraries中,如下圖:
這裡寫圖片描述
並且將上述的兩個jar包複製到spark安裝目錄下的jars資料夾下。
這裡寫圖片描述
這樣我們就完成了所有的環境配置。接下來我們進行測試:
首先,我們需要資料……資料檔案test_data.csv截圖如下(部分):
這裡寫圖片描述
完整的資料集可在http://archive.ics.uci.edu/ml/datasets/Wholesale+customers

找到。
在Eclipse中新建test_PMML專案,如下圖:
這裡寫圖片描述
其中test_pmml.py的python程式碼如下:

from pyspark import SparkContext
from pyspark.sql import SparkSession
from pyspark.ml import Pipeline
from pyspark.ml.classification import LogisticRegression
from pyspark.ml.feature import RFormula
from jpmml_sparkml import toPMMLBytes


sc = SparkContext.getOrCreate()
spark = SparkSession.builder.appName("PMML Predict").config("spark.some.config.option", "some-value").getOrCreate()
print("Read file from /home/vagrant/......")
df = spark.read.csv("/home/vagrant/test_data.csv", header = True, inferSchema = True)
print("Reading complete.\n")

print("Processing logistic model......")
formula = RFormula(formula = "target ~ .")
logit = LogisticRegression()
pipeline = Pipeline(stages = [formula, logit])
pipelineModel = pipeline.fit(df)
print("Modeling complete.\n")

print("Exporting pmml file......")
pmmlBytes = toPMMLBytes(sc, df, pipelineModel)
output_rdd = sc.parallelize([pmmlBytes]) 
output_rdd.saveAsTextFile("pmml_Logit")
print("Export complete.\nThe end.")

執行結果如下:
這裡寫圖片描述
同時會生成pmml_Logit資料夾,裡面包含PMML檔案part-00000,內容如下圖(部分):
這裡寫圖片描述
這樣我們就成功地匯出了邏輯迴歸模型的PMML檔案!本次分享就到這兒啦~~


參考文獻:
1.PMML介紹:http://dmg.org/pmml/v4-3/GeneralStructure.html
2.測試資料集:http://archive.ics.uci.edu/ml/machine-learning-databases/00292/
3.https://stackoverflow.com/questions/39888728/export-models-as-pmml-using-pyspark/39902676#39902676
4.https://github.com/jpmml/jpmml-sparkml-package

注意:本人現已開通兩個微信公眾號: 用Python做數學(微訊號為:python_math)以及輕鬆學會Python爬蟲(微訊號為:easy_web_scrape), 歡迎大家關注哦~~