【问题标题】:How to use decision tree with dataset from CSV file? [closed]如何将决策树与 CSV 文件中的数据集一起使用? [关闭]
【发布时间】:2017-10-22 11:48:50
【问题描述】:

我想在下面的代码中使用 Spark MLlib 的 org.apache.spark.mllib.tree.DecisionTree,但编译失败。

import org.apache.spark.ml.Pipeline
import org.apache.spark.ml.classification.DecisionTreeClassifier
import org.apache.spark.ml.classification.DecisionTreeClassificationModel
import org.apache.spark.ml.feature.{StringIndexer, IndexToString, VectorIndexer}
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache.spark.mllib.tree.DecisionTree
import org.apache.spark.mllib.tree.model.DecisionTreeModel
import org.apache.spark.mllib.util.MLUtils
import org.apache.spark.sql.SparkSession

val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val data = sqlContext.read.format("csv").load("C:/spark/spark-2.1.0-bin-hadoop2.7/data/mllib/airlines.txt")
val df = sqlContext.read.csv("C:/spark/spark-2.1.0-bin-hadoop2.7/data/mllib/airlines.txt")
val dataframe = sqlContext.createDataFrame(df).toDF("label");
val splits = data.randomSplit(Array(0.7, 0.3))

val (trainingData, testData) = (splits(0), splits(1))

val numClasses = 2
val categoricalFeaturesInfo = Map[Int, Int]()
val impurity = "gini"
val maxDepth = 5
val maxBins = 32
val model = DecisionTree.trainClassifier(trainingData, numClasses, categoricalFeaturesInfo,impurity, maxDepth, maxBins)

编译失败并显示以下错误消息:

:44: 错误:重载方法值 trainClassifier 替代品:(输入: org.apache.spark.api.java.JavaRDD[org.apache.spark.mllib.regression.LabeledPoint],numClasses: Int,categoricalFeaturesInfo:java.util.Map[Integer,Integer],杂质: 字符串,maxDepth:整数,maxBins: Int)org.apache.spark.mllib.tree.model.DecisionTreeModel
(输入: org.apache.spark.rdd.RDD[org.apache.spark.mllib.regression.LabeledPoint],numClasses: 诠释,分类特征信息: scala.collection.immutable.Map[Int,Int],杂质:字符串,最大深度: Int,maxBins: Int)org.apache.spark.mllib.tree.model.DecisionTreeModel 不能应用于 (org.apache.spark.sql.Dataset[org.apache.spark.sql.Row], Int, scala.collection.immutable.Map[Int,Int], String, Int, Int) val model = DecisionTree.trainClassifier(trainingData, numClasses, categoricalFeaturesInfo,impurity, maxDepth, maxBins)

【问题讨论】:

  • 我在运行上述代码时收到此错误“使用替代方法重载方法值 trainClassifier”。如果能解决这个问题就好了。

标签: scala apache-spark apache-spark-sql apache-spark-mllib decision-tree


【解决方案1】:

您将旧的基于 RDD 的 DecisionTree 与 Spark SQL 的新数据集 API 一起使用,因此会出现编译错误:

不能应用于 (org.apache.spark.sql.Dataset[org.apache.spark.sql.Row], Int, scala.collection.immutable.Map[Int,Int], String, Int, Int) val model = DecisionTree.trainClassifier(trainingData, numClasses, categoricalFeaturesInfo,impurity, maxDepth, maxBins)

注意第一个输入参数的类型为org.apache.spark.sql.Dataset[org.apache.spark.sql.Row],但DecisionTree 需要org.apache.spark.api.java.JavaRDD[org.apache.spark.mllib.regression.LabeledPoint]

引用Announcement: DataFrame-based API is primary API:

从 Spark 2.0 开始,spark.mllib 包中基于 RDD 的 API 已进入维护模式。 Spark 的主要机器学习 API 现在是 spark.ml 包中基于 DataFrame 的 API。

请根据Decision trees修改你的代码:

spark.ml 实现支持用于二元和多类分类以及回归的决策树,同时使用连续和分类特征。该实现按行对数据进行分区,允许对数百万甚至数十亿实例进行分布式训练。

【讨论】:

    猜你喜欢
    • 2021-07-13
    • 2011-02-13
    • 2022-08-15
    • 2011-09-12
    • 2015-10-18
    • 2020-08-17
    • 2012-12-20
    • 2016-08-09
    • 2017-10-23
    相关资源
    最近更新 更多