scala - 使用地图计算数组列中的元素
问题描述
我有一个数据框,它只包含一个带有数组的列
val df: DataFrame = Seq(
(Array("a", "b", "c")),
(Array("d", "e"))
).toDF("value")
架构:
root
|-- value: array (nullable = true)
| |-- element: string (containsNull = true)
当我使用列表达式计算每个数组中的元素数时,我得到了预期的结果:
df.select(size($"value")).show
印刷
+-----------+
|size(value)|
+-----------+
| 3|
| 2|
+-----------+
当我尝试将每一行映射到它的大小时,我1
在每一行中只得到一个:
df.map(_.size).show
印刷
+-----+
|value|
+-----+
| 1|
| 1|
+-----+
为什么第二个版本只打印1
每个数组而不是数组的大小?
解决方案
size
on aRow
给出了列/字段的数量,文档说:
行中的元素数
在你的情况下是 1。
你可以做的是:
df.map(_.getSeq(0).size)
.show()
给出:
+-----+
|value|
+-----+
| 3|
| 2|
+-----+
推荐阅读
- javascript - 如何递归地渲染 React 提供者?
- javascript - 有没有办法识别对他们来说是唯一且私密的 Google 用户?
- javascript - 让异步函数成为数组成员并使用 Rx 等待该数组的正确方法是什么?
- c# - 在 WinForm 应用程序中使用依赖注入
- css - css关键帧动画旋转完成后返回0度(自行撤消)
- vba - 更改文本框中的行距
- swift - 如何使用UIImage同时显示图片让图片的黑色部分隐藏
- java - 为什么我不能在本地主机上使用 FileWriter 写入文件,但它可以在其他机器上运行?
- python - KeyError: 1 在处理上述异常的过程中,又发生了一个异常:
- sql - 如果使用列表达式,则在升级到 Postgres 12 后修复巨大的性能下降