1

我正在尝试为 Graphframes 中的 parallelPersonalizedPageRank 算法生成 sourceIds 并按如下方式调用算法:

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 的方法。谢谢!

4

2 回答 2

4

正如我的评论所述,您可以映射到 .asInstanceOf[Any]。

例子:

val arr = Array("a", "b") 
val asAny = arr.map(_.asInstanceOf[Any])

这似乎也有效......

val asAny = arr.asInstanceOf[Array[Any]]

现在这样做是假设您出于某种原因不想像其他答案所指出的那样明确指定类型。

于 2018-04-03T23:26:20.203 回答
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))
于 2018-04-03T22:54:09.750 回答