天天看點

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介紹:

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.

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