我有一个 Spark 数据框df
具有以下架构:
root
|-- k: integer (nullable = false)
|-- v: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- a: integer (nullable = false)
| | |-- b: double (nullable = false)
| | |-- c: string (nullable = true)
是否可以只选择a, c
in v
from df
不做map
?尤其,df
是从 Parquet 文件加载的,我不想要以下值c
甚至可以被加载/读取。
这完全取决于您期望的输出,这从您的问题中并不清楚。让我澄清一下。
你可以做
df.select($"v.a",$"v.b").show()
然而,结果可能不是你想要的,因为v
是一个数组,它将为 a 生成一个数组,为 b 生成一个数组。你可能想做的是explode
然后从分解的数据框中选择数组 v:
df.select(explode($"v").as("v" :: Nil )).select($"v.a", $"v.b").show()
这会将 v 展平为一个表,其中所有值都展平。
无论哪种情况,火花/镶木地板should足够聪明地使用谓词下推并且根本不加载 c。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)