W. *_*hyk 2 scala apache-spark
我是Spark/Scala的初学者.我想从数据集中选择的数组中提取一个值(Double).简化的主要步骤如下所示.如何在最后一个val wpA中提取每个值[Double]?像val p1 = wpA(1)之类的东西.我没能通过wpA.toArray将它转换为普通数组.
预先感谢您的帮助.
case class Event(eventId: Int, n_track: Int, px:ArrayBuffer[Double],py: ArrayBuffer[Double], pz: ArrayBuffer[Double],ch: ArrayBuffer[Int], en: ArrayBuffer[Double])
---
val rawRdd = sc.textFile("expdata/rawdata.bel").map(_.split("\n"))
val eventRdd = rawRdd.map(x => buildEvent(x(0).toString))
val dataset = sqlContext.createDataset[Event](eventRdd)
dataset.printSchema()
root
|-- eventId: integer (nullable = false)
|-- n_track: integer (nullable = false)
|-- px: array (nullable = true)
| |-- element: double (containsNull = false)
|-- py: array (nullable = true)
| |-- element: double (containsNull = false)
|-- pz: array (nullable = true)
| |-- element: double (containsNull = false)
|-- ch: array (nullable = true)
| |-- element: integer (containsNull = false)
|-- en: array (nullable = true)
| |-- element: double (containsNull = false)
val dataFrame = dataset.select("px")
val dataRow = dataFrame.collect()
val wpA = dataRow(1)(0)
println(wpA)
WrappedArray(-0.99205, 0.379417, 0.448819,.....)
Run Code Online (Sandbox Code Playgroud)
当你写:
val wpA = dataRow(1)(0)
Run Code Online (Sandbox Code Playgroud)
你得到一个类型的变量Any,因为org.apache.spark.sql.Row.apply(Int)(这是在结果上调用的方法datarow(1))返回Any.
由于您知道此行的第一个项目(index = 0)的预期类型,因此您应该使用Row.getAs[T](Int)并指示您期望a WrappedArray.然后,编译器将知道这wpA是一个数组,您将能够使用它的任何方法(包括apply采用int 的方法,并且只能使用parens调用):
import scala.collection.mutable
val wpA = dataRow(1).getAs[mutable.WrappedArray[Double]](0)
println(wpA) // WrappedArray(-0.99205, 0.379417, 0.448819,.....)
println(wpA(0)) // -0.99205
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5017 次 |
| 最近记录: |