Spark/Scala中如何将Array[String]转为Array[Any]适配GraphFrames算法?
解决GraphFrames parallelPersonalizedPageRank的类型不匹配问题
这个问题其实很好解决,虽然String本身是Any的子类,但Scala里数组是不变类型——也就是说Array[String]并不会被编译器自动识别为Array[Any],我们只需要做个显式的类型转换就行,给你两种简单的实现方式:
方式一:在map阶段直接指定类型
在提取String的时候,直接把它转为Any类型,这样生成的数组天然就是Array[Any]:
val PPRIdCS = studentCS.select("id").collect.map(row => row.getString(0): Any)
方式二:对数组做强制类型转换
如果不想修改map逻辑,也可以在生成数组后直接做类型转换:
val PPRIdCS = studentCS.select("id").collect.map(row => row.getString(0)).asInstanceOf[Array[Any]]
为什么会出现这个报错?
Scala的泛型数组是不变的,哪怕String <: Any,Array[String]也不等于Array[Any],编译器不会帮我们做隐式转换,必须手动显式处理才行。
两种方法都能解决问题,个人更推荐第一种,因为它更直观,不需要强制转换,代码可读性也更好。
内容的提问来源于stack exchange,提问作者Guanghua Shu
相关产品推荐
相关产品推荐

