栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

关于从spark dataframe中获取某列下的数据时,数据类型不唯一时的处理方式

关于从spark dataframe中获取某列下的数据时,数据类型不唯一时的处理方式

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/699275.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号