你好,
我目前使用一個簡單的pyspark管道改造我的訓練數據,適合使用mlflow.spark模型和對數模型。但我得到這個錯誤(mlflow。sklearn效果非常好,但是由於我的數據的大小我需要使用pyspark毫升庫):
org.apache.spark.api.python。PythonSecurityException:路徑mlflowdbfs: /工件?run_id = d2ecf91f0&path = / best_model / sparkml /元數據com.databricks.mlflowdbfs使用一個不可信的文件係統。MlflowdbfsFileSystem’,但是你隻允許可信文件係統管理員配置的火花:(com.databricks.s3a。S3AFileSystem、shaded.databricks.org.apache.hadoop.fs.s3a.S3AFileSystemHadoop3 shaded.databricks.azurebfs.org.apache.hadoop.fs.azurebfs.SecureAzureBlobFileSystem、shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.SecureAzureBlobFileSystem shaded.www.eheci.com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem com.databricks.adl。AdlFileSystem、shaded.databricks.azurebfs.org.apache.hadoop.fs.azurebfs.SecureAzureBlobFileSystemHadoop3 shaded.databricks.V2_1_4.com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem、shaded.databricks.org.apache.hadoop.fs.azure.NativeAzureFileSystem shaded.www.eheci.com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystemHadoop3 shaded.databricks.org.apache.hadoop.fs.s3a.S3AFileSystem)
這是我使用的代碼:
從pyspark。毫升從pyspark.ml進口管道。分類從pyspark.ml進口RandomForestClassifier。功能導入VectorAssembler, StringIndexer pyspark.ml。評估從pyspark.ml進口BinaryClassificationEvaluator。優化進口CrossValidator ParamGridBuilder進口mlflow mlflow進口火花#開始一組mlflow運行和試驗mlflow.start_run (): mlflow.set_experiment(“/用戶/我的身份證/實驗”)#從CSV文件讀入數據數據= spark.read.csv (“dbfs: / FileStore /表/數據。csv”,標題= True, inferSchema = True) #預處理數據labelIndexer = StringIndexer (inputCol =“標簽”,outputCol =“indexedLabel”) .fit(數據)彙編程序= VectorAssembler (inputCols =數據。列(:1)outputCol = =“特性”)管道管道(階段= [labelIndexer,彙編程序])preprocessedData = pipeline.fit(數據).transform(數據)#將數據分為訓練集和測試集(trainingData testData) = preprocessedData.randomSplit([0.7, 0.3]) #定義模型和優化射頻hyperparameters = RandomForestClassifier (labelCol =“indexedLabel featuresCol =“特性”)paramGrid = ParamGridBuilder () \ .addGrid (rf。numTrees, 10年,20年,30 \ .addGrid (rf)。maxDepth, 5、10、15) \ .build() #使用麵積ROC評價模型評估者= BinaryClassificationEvaluator (labelCol =“indexedLabel metricName =“areaUnderROC”) #執行交叉驗證來優化hyperparameters簡曆= CrossValidator(估計量=射頻estimatorParamMaps = paramGrid,評估者=評估者,numFolds = 5) cvModel = cv.fit (trainingData) #日誌模型及其度量mlflow.spark.log_model (spark_model = cvModel。bestModel artifact_path =“best_model”)
有誰知道如何解決這個問題?
提前謝謝!
@Saeid Hedayati:
錯誤消息表明mlflow.spark。log_model函數試圖將模型元數據保存到一個名為com.databricks.mlflowdbfs的不可信的文件係統。MlflowdbfsFileSystem,但是火花已經配置為隻允許可信的文件係統。
這個問題的一個潛在的解決方案是顯式地設置MLflow可信文件係統使用的文件係統類型S3和Azure Blob存儲。你可以通過設置MLFLOW_EXPERIMENT_STORAGE環境變量所需的文件係統類型。
例如,如果你使用S3工件商店,你可以設置MLFLOW_EXPERIMENT_STORAGE
環境變量如下:
進口os操作係統。環境(“MLFLOW_EXPERIMENT_STORAGE”) = ' s3: / /桶/ mlflow
用S3 bucket的名稱替換我的桶桶和mlflow所需的路徑。
或者,你可以試試模型元數據保存到本地文件係統,而不是DBFS路徑通過指定的本地路徑artifact_uri mlflow的參數。start_run功能:
mlflow.start_run (artifact_uri = ' /道路/ /地方/ dir): #……mlflow.spark.log_model (spark_model = cvModel。bestModel artifact_path =“best_model”)
替換/道路/ /地方/ dir到本地目錄的路徑,你想保存模型的元數據。