2017-08-01 96 views
0

首先,我創建兩個ML算法並將它們保存到兩個單獨的文件中。請注意,這兩種模型都基於相同的數據框。 feature_1feature_2是從相同數據集中提取的不同特徵組。保存並加載pyspark中的兩個ML模型

import sys 
from pyspark.ml.classification import RandomForestClassificationModel 

trainer_1 = RandomForestClassifier(featuresCol="features_1") 
trainer_2 = RandomForestClassifier(featuresCol="features_2") 
model_1 = trainer_1.fit(df_training_data) 
model_2 = trainer_2.fit(df_training_data) 

model_1.save(sys.argv[1]) 
model_2.save(sys.argv[2]) 

然後,當我後來想使用的機型,我必須從各自的路徑加載他們兩個,f.ex.提供的路徑通過sys.argv。

import sys 
from pyspark.ml.classification import RandomForestClassificationModel 

model_1 = RandomForestClassificationModel.load(sys.argv[1]) 
model_2 = RandomForestClassificationModel.load(sys.argv[2]) 

我想要的是一個優雅的方式,可以將這兩個模型作爲一個整體保存在同一個路徑中。我主要這樣做,以便用戶在每次保存和加載時都不必跟蹤兩個單獨的路徑名。這兩個模型是緊密相連的,並且通常會一起創建和使用,因此它們只是一種模型。

這是管道的目的是什麼?

回答

0

我想通過將它們放在一個文件夾中的方式來做到這一點。然後用戶只需提供並知道該文件夾的路徑。

import sys 
import os 
from pyspark.ml.classification import RandomForestClassificationModel 

trainer_1 = RandomForestClassifier(featuresCol="features_1") 
trainer_2 = RandomForestClassifier(featuresCol="features_2") 
model_1 = trainer_1.fit(df_training_data) 
model_2 = trainer_2.fit(df_training_data) 

path = 'model_rfc' 
os.mkdir(path) 
model_1.save(os.path.join(sys.argv[1], 'model_1')) 
model_2.save(os.path.join(sys.argv[1], 'model_2')) 

名稱model_1model_2是硬編碼的,而不是需要由用戶是已知的。

import sys 
import os 
from pyspark.ml.classification import RandomForestClassificationModel 

model_1 = RandomForestClassificationModel.load(os.path.join(sys.argv[1], 'model_1')) 
model_2 = RandomForestClassificationModel.load(os.path.join(sys.argv[1], 'model_2')) 

這應該解決問題。這是做這件事的最好方法嗎?或者可以使用Spark庫中的功能將模型捆綁在一起更好?