arrays - Scala试图从数据框中的udt(数组)中提取值
问题描述
这似乎应该是一个简单的问题,但我找不到任何可以在文档或 stackoverflow 中工作的东西。
我正在尝试从继承的 Scala 代码中的数据框中的 udt 中提取值。我的目标是从(或Scala中的任何正确语法)中DataFrame
提取适合的列yProbability.values(1)
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>>
我还尝试在使我失望时对 outputDataAAL 进行采样,但#4404
我不知道这是否是由于列错误造成的。显然,没有运气。
非常感谢您的帮助。
-瑞克
解决方案
好吧,我想出了一个解决方案,但它有点难看。我觉得应该有一个更简单的答案,但这有效。
import org.apache.spark.sql.functions._
import org.apache.spark.ml._
val vecToArray = udf( (xs: linalg.Vector) => xs.toArray )
val newSample = outputDataAAL.withColumn("yProbabilityArr" , vecToArray($"yProbability") )
val outputDataAALNew = newSample.withColumn("fit", $"yProbabilityArr".getItem(1))
推荐阅读
- r - 绘制年度计数的直方图
- c++ - 为什么 c++ 不能将 2/3 打印为 0.666667?
- objective-c - 用于截取整个 UITableView 的代码在 iOS 13 中不再起作用
- forms - 当我按下硬件后退按钮选择器时,从该页面调用
- java - Java 编码风格创建新的局部变量来引用类成员变量
- css - 如何在 React Native 中使用 flexbox 将一个项目居中?
- visual-studio - 从哪里下载 Visual Studio 2017 社区版?
- javascript - 将时间戳转换为日期并获取 HH:MM 格式
- matlab - 需要帮助调试梯形矩阵函数的代码
- powerbi - 在 Power BI 中的图表标题中嵌入测量列