pyspark模型结构解析
最近在将自研算法集成到pyspark生态中,为了降低用户学习成本,计划将接口、最终生成模型都按照pyspark要求来实现,但是在互联网上并没有找到官方的开发指南,所以只能自己一步一步的琢磨,今天就先来看下pyspark最终保存的模型长什么样,后面再全面总结如何融入生态。
生成模型
首先训练一个模型,本文以逻辑回归为例,代码如下
1 | data = [LabeledPoint(0.0, [0.0, 1.0]), LabeledPoint(1.0, [1.0, 0.0]),] |
生成的结果如下,可以看出模型包含2个文件夹,一个是data,一个是metadata,很明显这两个都是parquet格式的文件,data是DF格式的,metadata是文本格式的。
1 | $ tree lrm_model/ |
解析模型
尝试用parquet格式读取data下的内容,很显然是DF结构的数据,3个字段,一条记录,主要是逻辑回归的参数。
1 | sqlContext.read.parquet('file:///lrm_model/data').show() |
1 | +--------------------+---------+---------+ |
再解析metadata下的数据,如果再用parquet去读就会报错,用text()方法可以看到是一段文字,但并没有显示完全。
1 | sqlContext.read.text('file:///lrm_model/metadata').show() |
1 | +--------------------+ |
由于是文本,所以直接用cat输出文件内容,可以看出是这个模型的元数据文件,包括类名、版本号及输入数据的特征。
1 | $ cat lrm_model/metadata/part-00000 |