最近做项目需要用一下逻辑回归模型,一开始用了spark的基于RDD的mlib,写了一个版本的脚本,后来看官方文档发现mlib目前处于维护状态,主推的还是基于Dataframe的ml,于是重头开始写基于ml的模型脚本,哎,坚强地继续搬砖
由于中间有个指标是事件类型,属于字符串类型,需要做单独处理,这里利用自带的StringIndexer函数, 主要是根据事件类型出现频次来确定数值,handleInvalid主要针对以后新出现的事件类型时候的处理方式,有error, skip和keep,具体含义可以参考官方文档的示例
from pyspark.ml.feature import StringIndexer
indexer=StringIndexer(inputCol='eventtype',outputCol='eventtypeIndex',handleInvalid='keep')
indexed=indexer.fit(raw_data).transform(raw_data).select(...)
接下来生成标签和特征向量
from pyspark.ml.linalg import Vectors
data=indexed.rdd.map(lambda x:(int(x[-1]),Vectors.dense(x[:-1]))).toDF(['label','features'])
接下来做变量标准化处理