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

时间:2022-01-05 23:10:18

我的处理顺序:

  1. 因为我在另外一个scala文件中已经将csv分割为了训练集和测试集,并且为了后续计算各个filed之间的相关系数而把所有filed的类型都已经改为了Double型,所以我就没有考虑我的数据会有问题。
  2. 所以我怀疑是文件第一行的列名在搞鬼,然后我就去除了文件的第一行:然后:org.apache.hadoop.fs.ChecksumException: Checksum error
  3. 读取调用hadoop的API生成的文件,系统会检查文件是否“损坏”
  4. 复制粘贴后删除第一行再试,发觉还是报错
  5. 看源码,发觉VectorAssembler处理数据类型时最开始不会理睬第一行,仅仅在所有数据类型都case匹配不到时才会去做一些与第一行有关的操作。我不得不怀疑下filed的数据类型
    Spark使用VectorAssembler时:IllegalArgumentException: Data type StringType is not supported
  6. printSchema发现:所有filed的类型又变成了string。。。我靠!这么不智能?还是说我操作失误?我认为Spark按道理还是能检测出数据类型的啊(194201.0, 378.0, 831.0, 2.0, 2.0, 3.0, 6.0些都理解为String?
  7. 我不可能再去转换一次,那样太傻逼了,肯定有别的办法
  8. 加上mark标记的内容
    val rawTrainDf = spark.read.format(“csv”).option(“header”,true).option(“inferSchema”, true).load(myTestCsvPath)
  9. 搞定:
    Spark使用VectorAssembler时:IllegalArgumentException: Data type StringType is not supported

注:

I. option(“header”,true)是说,Spark你别在我的csv文件的第一行添加列名:_c0,_c1等,我自己有列名。
II. option(“inferSchema”, true)是说,Spark你别用你的默认方式处理我的数据类型,我也有【我暂时这样理解的】
III. 疑惑:option具体有哪些属性可以设置?我也没找见这个option相关的源代码在哪。知道的道友麻烦点拨一下,感谢!