您的位置:首页 > 其它

Spark使用VectorAssembler时:IllegalArgumentException: Data type StringType is not supported

2018-01-02 11:41 1141 查看

我的处理顺序:

因为我在另外一个scala文件中已经将csv分割为了训练集和测试集,并且为了后续计算各个filed之间的相关系数而把所有filed的类型都已经改为了Double型,所以我就没有考虑我的数据会有问题。

所以我怀疑是文件第一行的列名在搞鬼,然后我就去除了文件的第一行:然后:org.apache.hadoop.fs.ChecksumException: Checksum error

读取调用hadoop的API生成的文件,系统会检查文件是否“损坏”

复制粘贴后删除第一行再试,发觉还是报错

看源码,发觉VectorAssembler处理数据类型时最开始不会理睬第一行,仅仅在所有数据类型都case匹配不到时才会去做一些与第一行有关的操作。我不得不怀疑下filed的数据类型



printSchema发现:所有filed的类型又变成了string。。。我靠!这么不智能?还是说我操作失误?我认为Spark按道理还是能检测出数据类型的啊(194201.0, 378.0, 831.0, 2.0, 2.0, 3.0, 6.0些都理解为String?

我不可能再去转换一次,那样太傻逼了,肯定有别的办法

加上mark标记的内容

val rawTrainDf = spark.read.format(“csv”).option(“header”,true).option(“inferSchema”, true).load(myTestCsvPath)

搞定:



注:

I. option(“header”,true)是说,Spark你别在我的csv文件的第一行添加列名:_c0,_c1等,我自己有列名。

II. option(“inferSchema”, true)是说,Spark你别用你的默认方式处理我的数据类型,我也有【我暂时这样理解的】

III. 疑惑:option具体有哪些属性可以设置?我也没找见这个option相关的源代码在哪。知道的道友麻烦点拨一下,感谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐