val range_p = df.select(col(s"${x}").getField("range")).collect.apply(0).foreach(println)
获取的数据样式如下
[WrappedArray(0, 10000)]
…
[WrappedArray(0.5, 2.0)]
…
WrappedArray里面的数据被自动解析成了Long、Double类型
我想把数据转成Float类型,于是用.getAs[mutable.WrappedArray[Float]](0)去解析其中的数据,但是提示
java.lang.Long cannot be cast to java.lang.Float
换成
.getAs[mutable.WrappedArray[Long]](0)
又会提示 java.lang.Double cannot be cast to java.lang.Long
于是换成val range_p = df.select(col(s"${x}").getField("range")).collect.apply(0).getList(0)去解析数据里的WrappedArray结构,得到列表类型的返回值
然后用
range_p.toArray().map(java.lang.String.valueOf(_))
将数组内元素全部转成String类型,后面根据需要在转换成其它类型
查资料时发现,用cast 方法去显式或隐式的转换数据类型时容易触发
java.lang.XXX cannot be cast to java.lang.YYY
最好是用Java里的XXX.valueOf()方法去进行类型转换
例如:java.lang.String(x).valueOf()
参考资料:
Scala中isInstanceOf 和 asInstanceOf
https://blog.csdn.net/weixin_42181200/article/details/80324801
spark中处理dataframe往往遇到”…cannot be cast to …”这种数据不匹配的问题
https://blog.csdn.net/qq_35022142/article/details/79800394
java.lang.Long cannot be cast to java.lang.String in Java
https://stackoverflow.com/questions/31066811/java-lang-long-cannot-be-cast-to-java-lang-string-in-java



