Spark Scala:将字符串列转换为双精度

时间:2019-02-01 11:10:42

标签: scala apache-spark type-conversion

我是scala和spark的新手。我按如下所示导入了一个csv,并希望在spark ML中使用它。

scala>var data = spark.read.format("csv").load("E:\\...\\file.csv")
scala>data.show(4)
+---+---+---+----+---+---+
|_c0|_c1|_c2| _c3|_c4|_c5|
+---+---+---+----+---+---+
|  0| 30|  1| -26|  2|173|
|  3| 31|  2|-100|  3| 31|
|  1| 56|  1| -28|  1|158|
|  2| 12|  3| -49|  1| 66|
+---+---+---+----+---+---+

在组装功能部件时,我被告知不支持数据类型字符串。如何将这些列从字符串转换为双精度。谢谢

scala>val colArrary=Array("_c1","_c2","_c3","_c4","_c5")
scala>var assembler=new VectorAssembler().setInputCols(colArrary).setOutputCol("features")
scala>val vecDF:DataFrame=assembler.transform(data)
java.lang.IllegalArgumentException: Data type string of column _c1 is not supported.

1 个答案:

答案 0 :(得分:0)

我尝试过这样的转换,并且有效

val colNames=Array("_c1","_c2","_c3","_c4","_c5")
 for (colName<-colNames){
     |   data=data.withColumn(colName,col(colName).cast("Double"))
     | }