gpt4 book ai didi

scala - 如何获取 WrappedArray : result of Dataset. select ("x").collect() 中的元素?

转载 作者:行者123 更新时间:2023-12-02 08:17:29 26 4
gpt4 key购买 nike

我是 Spark/Scala 的初学者。我想在从 Dataset 中选择的 Array 中提取一个值(Double)。简化的主要步骤如下所示。如何提取每个值[Double]最后一个 val wpA ?类似于 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,.....)

最佳答案

当你写作时:

val wpA = dataRow(1)(0)  

你得到一个 Any 类型的变量,因为 org.apache.spark.sql.Row.apply(Int) (这是在结果中调用的方法datarow(1)),返回 Any

由于您知道该行的第一项(索引 = 0)的预期类型,因此您应该使用 Row.getAs[T](Int) 并指出您需要一个 WrappedArray。然后,编译器将知道 wpA 是一个数组,您将能够使用它的任何方法(包括采用 int 并且可以使用调用的 apply 方法仅限括号):

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

关于scala - 如何获取 WrappedArray : result of Dataset. select ("x").collect() 中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40627610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com