【发布时间】:2019-09-19 03:33:43
【问题描述】:
我有一个数据框,其中只包含一个带有数组的列
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而不是数组的大小?
【问题讨论】:
-
因为您要求 row 的大小为 1。如果您想使用
map函数,最好使用类型 数据集,试试df.as[Array[Int]].map(_.size).show()。
标签: scala apache-spark