【发布时间】:2020-07-07 09:45:42
【问题描述】:
这似乎应该是一个简单的问题,但我找不到任何可以在文档或 stackoverflow 中工作的内容。
我正在尝试从继承的 Scala 代码中的数据帧内的 udt 中提取值。我的目标是拥有一个 DataFrame 和一个从 yProbability.values(1) 提取的适合列(或任何 Scala 中的正确语法)
DataFrame 的结构如下:
outputDataAAL:org.apache.spark.sql.DataFrame
- info_conversationid:string
- document:string
- yProbability:udt
- yHat:double
以 yProbability 的示例元素为:
array
- 0: 1
- 1: 2
- 2: []
- 3:
- 0: 0.8054468196483193
- 1: 0.19455318035168068
在 r 中我做了一个简单的操作:
outputDataAAL$fit <- outputDataAAL$yProbability %>% lapply(function(x) {x[[2]][2]}) %>% unlist
这很容易,但对于我正在查看的数据大小来说很慢。这就是为什么我想在 Scala 中做这件事。
我尝试仅提取值(即 yProbability 中的数组元素 #3),但以下两种方法都给我以下错误。
val newSample = outputDataAAL.select("yProbability.values(1)")
val newSample = outputDataAAL.select($"yProbability".getItem("values(1)"))
错误:
Can't extract value from yProbability#4404: need struct type but got
struct<type:tinyint,size:int,indices:array<int>,values:array<double>>
我还尝试在#4404 上对 outputDataAAL 进行采样,这让我失望了,我不知道这是否是由于列错误。显然,没有运气。
非常感谢您的帮助。
-瑞克
【问题讨论】:
标签: arrays scala dataframe apache-spark extract