我有一个DataFrame myDf
,其中包含成对的点(即x和y坐标)对数组,它具有以下架构:
myDf.printSchema
root
|-- pts: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- x: float (nullable = true)
| | |-- y: float (nullable = true)
我想得到x
和y
作为单个普通ScalaArray
的。我认为我需要应用爆炸功能,但我不知道如何操作。我尝试应用此解决方案,但无法正常工作。
我在Scala 2.10中使用Spark 1.6.1
编辑:我意识到我有一个误解Spark的工作原理,只有在收集数据(或使用UDF)的情况下才有可能获得实际的数组
有两种方法可以将点作为平面scala数组:
收集给司机:
val localRows = myDf.take(10)
val xs: Array[Float] = localRows.map(_.getAs[Float]("x"))
val ys: Array[Float] = localRows.map(_.getAs[Float]("y"))
或在UDF中:
val processArr = udf((pts:WrappedArray[Row]) => {
val xs: Array[Float] = pts.map(_.getAs[Float]("x")).array
val ys: Array[Float] = pts.map(_.getAs[Float]("y")).array
//...do something with it
})
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句