我正在尝试为Graphframes中的parallelPersonalizedPageRank算法生成sourceIds,并调用algoirthm如下:
val PPRIdCS = studentCS.select("id").collect.map(row => row.getString(0))
val ranksCS = studentGraph
.parallelPersonalizedPageRank
.resetProbability(0.15)
.maxIter(10)
.sourceIds(PPRIdCS)
.run()
我得到的错误信息如下:
Message: <console>:46: error: type mismatch;
found : Array[String]
required: Array[Any]
Note: String <: Any, but class Array is invariant in type T.
You may wish to investigate a wildcard type such as `_ <: Any`. (SLS
3.2.10).sourceIds(PPRIdCS)
我无法弄清楚将String类型转换为Any类型的方法是什么,或者在生成PPRIdCS时将String映射到Any的方法。谢谢!
答案 0 :(得分:3)
从我的评论中可以看出,你可以映射到.asInstanceOf [Any]。
示例:
val arr = Array("a", "b")
val asAny = arr.map(_.asInstanceOf[Any])
这似乎也有效......
val asAny = arr.asInstanceOf[Array[Any]]
现在这样做是假设您出于某种原因不想明确指定类型,如另一个答案所述。
答案 1 :(得分:2)
明确说明类型:
val PPRIdCS: Array[Any] = studentCS.select("id").collect.map(row => row.getString(0))
或更好
val PPRIdCS: Array[Any] = studentCS.select("id").collect.map(row => row(0))