Я хочу сохранить модель биномиальной логистической регрессии, которую я обучил, на диск для последующего использования для тестирования различных наборов входных данных.Но MLWriter создает только пустые каталоги с файлами _SUCCESS, без каких-либо фактических данных.
Я использую Spark 2.4.0 с Scala 2.12.Он отлично работает на моей локальной машине Windows.Но когда я пробую его на автономном кластере Spark с двумя рабочими, я просто получаю пустые каталоги.На консоли не сообщается об ошибке.
Я знаю, что модель обучена, так как я вижу коэффициенты и перехваты, когда я их печатаю.
Одним из вариантов может быть настройка подробного входа в систему.log4j.Но я относительно новичок в Spark и Scala и не знаю, как настроить log4j.
Вот код:
import org.apache.spark.sql.SparkSession
import org.apache.spark.ml.classification.LogisticRegression
import org.apache.spark.ml.feature.FeatureHasher
import org.apache.spark.sql.functions.{when, _}
object churnLearn {
def main(args: Array[String]) {
// Create Spark Session
println("Create Spark Session")
val spark = SparkSession.builder.appName("Telecom Churn").getOrCreate()
import spark.sqlContext.implicits._
// Build JDBC URL
println("Build JDBC URL")
val userName = args(0)
val userPwd = args(1)
val tdServer = args(2)
val numPartitions = args(3)
val teraURL = "jdbc:teradata://"+tdServer
// Read training data
// Convert churn column to numeric
println("Read training data")
val telDF = spark.read.format("jdbc").
option("user", userName).
option("password", userPwd).
option("driver", "com.teradata.jdbc.TeraDriver").
option("url", teraURL).
option("dbtable", "(SEL CAST(phone_number AS BIGINT) AS phone_num, V.* FROM Telco_Churn_Anal_Train_V V) AS T").
option("partitionColumn", "phone_num").
option("lowerBound", 1000000000).
option("upperBound", 9999999999L).
option("numPartitions", numPartitions).
load().
withColumn("churnn", when(col("churn") === "True", 1).
when(col("churn") === "False", 0))
println("Sample training data:")
telDF.show(5)
println(s"Number of partitions = " + telDF.rdd.getNumPartitions.toString)
// Derive multi-column hash to be used as the feature column
println("Derive multi-column hash to be used as the feature column")
val hasher = new FeatureHasher().
setInputCols("state", "account_length", "international_plan", "number_vmail_messages",
"total_day_minutes", "total_day_calls", "total_eve_minutes", "total_eve_calls",
"total_night_minutes", "total_night_calls", "total_intl_minutes", "total_intl_calls", "customer_service_calls").
setOutputCol("features")
val telfDF = hasher.transform(telDF)
println("Multi-column feature hash derived:")
telfDF.show(5)
// Set LR parameters
println("Build LR model")
val lr = new LogisticRegression().
setLabelCol("churnn").
setFamily("binomial").
setMaxIter(10)
// Build LR model
val churnLRM = lr.fit(telfDF)
// Display model co-efficients
println(s"Model coefficients: ${churnLRM.coefficientMatrix}")
println(s"Model intercepts: ${churnLRM.interceptVector}")
// Persist model to local disk
spark.conf.set("spark.sql.parquet.compression.codec", "none")
println("Persist model to local disk")
churnLRM.save("file:///churnLRM")
println("Done. Stop Spark")
spark.stop()
}
}
Вот соответствующая часть вывода консоли:
Build LR model
Model coefficients: 1 x 262144 CSCMatrix
(0,57900) -0.10050111279111754
(0,83307) -1.044985432080533E-4
(0,90698) 0.010020069092956272
(0,91893) -0.004959044995655235
(0,92032) -0.005122412734194552
(0,93943) 0.010010761343651198
(0,100271) -0.010744307068092304
(0,101191) 2.0542379091223317
(0,111615) -0.008632729362046196
(0,158493) 0.43964899058141127
(0,167972) 0.0023018864077632276
(0,196023) -0.002012897224896602
(0,231136) -0.02820408906812126
Model intercepts: [-1.8805498307729487]
Persist model to local disk
Done. Stop Spark
Ниже указан каталог, в котором должна была быть сохранена модель:
/ # ls -lR churnLRM
churnLRM:
total 8
drwxr-xr-x 2 root root 4096 May 28 12:14 data
drwxr-xr-x 2 root root 4096 May 28 12:14 metadata
churnLRM/data:
total 0
-rw-r--r-- 1 root root 0 May 28 12:14 _SUCCESS
churnLRM/metadata:
total 0
-rw-r--r-- 1 root root 0 May 28 12:14 _SUCCESS