如何在Spark(Scala)中将WrappedArray [WrappedArray [Float]]转换为Array [Array [Float]]?

8

我是使用Spark 2.0的。我的数据框中有一列包含多个浮点型的WrappedArray

一个例子:

[[1.0 2.0 2.0][6.0 5.0 2.0][4.0 2.0 3.0]]

我试图将这个列转换为一个 Array[Array[Float]]

目前我尝试过的方法如下:

dataframe.select("mycolumn").rdd.map(r => r.asInstanceOf[Array[Array[Float]]])

但是我遇到了以下错误:
Caused by: java.lang.ClassCastException:
 org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema cannot be cast to [[F

任何想法都将不胜感激。谢谢。
2个回答

4

试试这个:

  val wawa: WrappedArray[WrappedArray[Float]] = null 
  val res: Array[Array[Float]] = wawa.map(inner => inner.array).toArray

它在我这里编译通过了。


谢谢Sami,你的回答帮助我找到了最终解决方案。我会更新我的答案,并提供准确的代码,以便像我这样从数据框开始的人参考。 - bobo32
我在Stackoverflow上的第一个问题得到了3个答案,但它们都没有起作用,但是通过结合它们,我找到了解决方案。 :D - Sami Badawi

3

在@sami-badawi的回答之后,我为那些像我一样从数据框开始的人提供答案。

dataframe.select("mycolumn").rdd.map
(row => row.get(0).asInstanceOf[WrappedArray[WrappedArray[Float]]].array.map(x=>x.toArray))

我尝试通过以下方式打印出值:rdd.map(row => row.get(0).asInstanceOf[WrappedArray[WrappedArray[String]]].toSeq.map(x=>x.toSeq.foreach(println))) - Burt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接