本文主要是用SparkMLlib中的一些算法来对PM进行预测,其中涉及了dataframe中对列使用自定义函数的操作,很方便!!
任务:读取pm.csv,将含有缺失值的行扔掉(或用均值填充)将数据集分为两部分,0.8比例作为训练集,0.2比例作为测试集
(1)使用month,day,hour,DEWP,TEMP,PRES,cbwd,Iws,Is,Ir作为特征列(除去No,year,pm),pm作为label列,使用训练集、随机森林算法进行回归建模,使用回归模型对测试集进行预测,并评估。
1) 将数据读取到dataframe中然后将标签列和特征列选出,同时去除数值为空的数据
val conf = new SparkConf().setAppName("input").setMaster("local[*]")
val sparkContext = new SparkContext(conf)
val sqlContext = new SQLContext(sparkContext)
val url = "C:\\Users\\shuangmm\\Desktop\\pm.csv"
val dataDF =sqlContext.read.format("csv")
.option("header","true")
.option("inferSchema",true.toString)
//这是自动推断属性列的数据类型。
.load(url).na.drop()
2) 选取特征列,使用了VectorAssembler函数,将数据转换为向量,方便输进模型,但是有一列是字符格式的,需要进行处理
使用StringIndexer的方法将字符串改为索引的形式。
val index = new StringIndexer()
.setInputCol("cbwd")
.setOutputCol("cbwd_in")
val feat = new VectorAssembler()
.setInputCols(Array("month","day","hour","DEWP","TEMP","PRES