pyspark使用ML库并用pyspark2pmml把模型保存为pmml格式

一、准备工作   

    使用Idea开发pyspark程序,在这之前我们需要做一些准备工作, 如同PyCharm开发pyspark程序一样,我们需要先对python项目进行配置:

1. 使用anaconda3里面的python

    打开File -> Project Structure -> Project ,其中Project SDK的路径设为anaconda3的python路径,如 /home/software/anaconda3/python

2. 添加python工具库。

    这里区别于pycharm的settings -> Project Interpreter直接添加,Idea是在Project Structure -> SDKs -> packages ->"绿色加号+"中添加

3. 要把训练好的模型保存为pmml格式(通用格式,以供java来调用),还需要PySpark2PMML文件夹和jar包 jpmml-sparkml-executable-1.4.6.jar  ,这两个配置文件按照2步骤是添加不了的,因为搜索不到。对于pyspark2pmml网上只有三篇文章与之相关:

(1.) 介绍了pyspark2pmml的安装,步骤通俗易懂,但他的步骤2容易出现错误,并且错误网上找不到解决方案,且其步骤相对繁琐。网址是:https://blog.csdn.net/jclian91/article/details/78707928

(2.) 按照官网的步骤,只需两步,推荐使用网址是:https://github.com/jpmml/pyspark2pmml

(3). 介绍了如何使用pyspark2pmml生成pmml文件,我认为实际作用不大。网址是:http://ju.outofmemory.cn/entry/362524

接下来我将介绍pyspark2pmml的简单正确的安装方式

<1> 打开官网:https://github.com/jpmml/pyspark2pmml,点击releases,选择pyspark2pmml的版本,一般我们选最新的0.3.0版本。

pyspark使用ML库并用pyspark2pmml把模型保存为pmml格式_第1张图片

pyspark使用ML库并用pyspark2pmml把模型保存为pmml格式_第2张图片

<2> 点击 Source Code(zip)版本,它会默认保存到home下的download目录(这个问题小伙伴们肯定比我更了解它的保存路径),找到下载路径后,右键 "抽取到该文件夹" 将其解压。

pyspark使用ML库并用pyspark2pmml把模型保存为pmml格式_第3张图片

pyspark使用ML库并用pyspark2pmml把模型保存为pmml格式_第4张图片

<3> 我们再把 jpmml-sparkml-executable-1.4.6.jar 下载下来,它在初始页面处。同样保存到了download文件夹下。

pyspark使用ML库并用pyspark2pmml把模型保存为pmml格式_第5张图片

<4> 此时download文件夹下有三个文件:

pyspark使用ML库并用pyspark2pmml把模型保存为pmml格式_第6张图片

<5> a.   把jar包jpmml-sparkml-executable-1.4.6.jar 移动到spark-2.3.0-bin-hadoop2.7(你的本地spark的目录,因为你竟然用Idea跑spark了,那么你本地肯定有spark文件)下的jars文件夹中,指令是:mv jpmml-sparkml-executable-1.4.6.jar /home/software/spark-2.3.0-bin-haddoop2.7/jars

        b.  把zip文件pyspark2pmml-0.3.0.zip 移动到 spark-2.3.0-bin-hadoop2.7下的python下的lib中,指令是:  mv pyspark2pmml-0.3.0.zip /home/software/spark-2.3.0-bin-haddoop2.7/python/lib

        c.  把解压文件pyspark2pmml-0.3.0 添加到Idea中。步骤是:① 把该文件移动到spark-2.3.0-bin-hadoop2.7下的python下的pyspark文件夹中。       ②再在Idea的Modules中添加这个文件。 File -> Project Structure -> Modules -> Add Content Root -> 选择刚才那个文件(pyspark2pmml-0.3.0文件)

pyspark使用ML库并用pyspark2pmml把模型保存为pmml格式_第7张图片

如此以来,Idea配置完成。可以跑程序了

二、测试代码(部分代码,直接运行是不行的,主要看PMMLBuilder的使用)

from pyspark.sql import SparkSession
import pandas as pd
from scipy import interpolate
import pyspark.sql.functions as fn
import numpy as np
import pymysql
import datetime,time
import pyspark.sql.types as typ
import pyspark.mllib.stat as st
import matplotlib.pyplot as plt
from matplotlib.font_manager import *
from pyspark.mllib.classification import LogisticRegressionWithLBFGS,LogisticRegressionModel
import pyspark.mllib.feature as ft
import pyspark.mllib.regression as reg
import pyspark.mllib.linalg as lg
import pyspark.mllib.evaluation as ev
import pyspark.ml.feature as mlft
import pyspark.ml.classification as cl
from pyspark.ml import Pipeline
import pyspark.ml.evaluation as mlev
from pyspark2pmml import PMMLBuilder
spark = SparkSession \
    .builder \
    .master("local[*]")\
    .appName("data analize paper") \
    .config("IdeaProjects", "some value") \
    .getOrCreate()
sc = spark.sparkContext
featuresCreator = mlft.VectorAssembler(
    inputCols=[col for col in select_feature[1:]],
    outputCol='features')
logistic = cl.LogisticRegression(
    maxIter=100,
    #regParam=0.01,
    labelCol='classify')
pipeline = Pipeline(stages=[featuresCreator,logistic])
heattraindata,heattestdata = trainheatdata.randomSplit([0.7,0.3],seed=666)
model = pipeline.fit(heattraindata)
pmmlBuilder = PMMLBuilder(sc, heattraindata, model).putOption(logistic, "compact", True)
pmmlBuilder.buildFile("Logistic2.pmml")

 

 

 

 

你可能感兴趣的:(pyspark使用ML库并用pyspark2pmml把模型保存为pmml格式)