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

如下圖所示:
Git下載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路徑。耐心等待運行,運行結果如下:

生成uber-JAR文件
這時jpmml-sparkml-package文件夾下會多出target文件夾,如下:

target文件夾
  3.將上述的jpmml_sparkml-1.3rc0-py3.5.egg文件添加到Eclipse的Pydev的libraries中,如下圖:

在Eclipse設置libraries
並且將上述的兩個jar包復制到spark安裝目錄下的jars文件夾下。

復制jar包
這樣我們就完成了所有的環境配置。接下來我們進行測試:
  首先,我們需要數據……數據文件test_data.csv截圖如下(部分):

test_data.csv截圖(部分)
完整的數據集可在http://archive.ics.uci.edu/ml/datasets/Wholesale+customers找到。
  在Eclipse中新建test_PMML項目,如下圖:

test_PMML項目
其中test_pmml.py的python代碼如下:

 1 from pyspark import SparkContext
 2 from pyspark.sql import SparkSession
 3 from pyspark.ml import Pipeline
 4 from pyspark.ml.classification import LogisticRegression
 5 from pyspark.ml.feature import RFormula
 6 from jpmml_sparkml import toPMMLBytes
 7 
 8 
 9 sc = SparkContext.getOrCreate()
10 spark = SparkSession.builder.appName("PMML Predict").config("spark.some.config.option", "some-value").getOrCreate()
11 print("Read file from /home/vagrant/......")
12 df = spark.read.csv("/home/vagrant/test_data.csv", header = True, inferSchema = True)
13 print("Reading complete.\n")
14 
15 print("Processing logistic model......")
16 formula = RFormula(formula = "target ~ .")
17 logit = LogisticRegression()
18 pipeline = Pipeline(stages = [formula, logit])
19 pipelineModel = pipeline.fit(df)
20 print("Modeling complete.\n")
21 
22 print("Exporting pmml file......")
23 pmmlBytes = toPMMLBytes(sc, df, pipelineModel)
24 output_rdd = sc.parallelize([pmmlBytes]) 
25 output_rdd.saveAsTextFile("pmml_Logit")
26 print("Export complete.\nThe end.")

運行結果如下:

運行結果
同時會生成pmml_Logit文件夾,里面包含PMML文件part-00000,內容如下圖(部分):

生成的PMML文件(部分)
這樣我們就成功地導出了邏輯回歸模型的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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM