在练习林子雨老师的“淘宝双11数据分析与预测课程案例—步骤四:利用Spark预测回头客行为”章节时出现了代码报错。
具体在执行"val model = SVMWithSGD.train(train, numIterations)"代码后出现了如下报错:
java.lang.NumberFormatException: For input string: "Label"
查找相关资料说是因为格式转换的问题,即可能是应该输入“整型”却意外的输入了"label"
代码执行过程如下:
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.linalg.{Vectors,Vector}
import org.apache.spark.mllib.classification.{SVMModel, SVMWithSGD}
import org.apache.spark.mllib.evaluation.BinaryClassificationMetrics
import java.util.Properties
import org.apache.spark.sql.types._
import org.apache.spark.sql.Row
val train_data = sc.textFile("/dbtaobao/dataset/train_after.csv")
val test_data = sc.textFile("/dbtaobao/dataset/test_after.csv")
val train= train_data.map{line =>
val parts = line.split(',')
LabeledPoint(parts(4).toDouble,Vectors.dense(parts(1).toDouble,parts
(2).toDouble,parts(3).toDouble))
}
val test = test_data.map{line =>
val parts = line.split(',')
LabeledPoint(parts(4).toDouble,Vectors.dense(parts(1).toDouble,parts(2).toDouble,parts(3).toDouble))
}
val numIterations = 1000
val model = SVMWithSGD.train(train, numIterations)
数据从HDFS文件系统中train_after.csv取出然后存入train_data进入分割,在之后的过程中都没有混入除了整型以外的变量。分析原因可能是HDFS文件系统中train_after.csv本来就有非整型变量,由于HDFS文件系统中train_after.csv是由本地文件夹下的train_after.csv原封不动导入的,所以我打开train_after.csv,结果发现该文件的第一行代表该列的属性为string类型没有删干净,问题就出现在这里,随后我将列的属性删除完毕,重新生成了train_after.csv文件,此时文件中除了整型不含其它类型,我再将HDFS文件系统中的train_after.csv删除并导入我重新生成的train_after.csv文件,最后问题得到解决。
删除HDFS文件系统中的文件操作可参考: