从结构数组中选择特定的列在Spark DataFrames中

4

我有一个Spark DataFrame 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)

是否可以在不进行映射的情况下,仅从df中选择a, cv中?特别是,df是从Parquet文件加载的,我甚至不想加载/读取c的值。

1个回答

1

根据你的问题,你期望得到什么样的输出并不清楚,因此答案也不确定。让我澄清一下。 你可以进行以下操作:

df.select($"v.a",$"v.b").show()

然而,结果可能并非您所期望的,因为v是一个数组,它将为a产生一个数组,并为b产生一个数组。您可能想要做的是对数组v进行explode处理,然后从已分裂的数据框中进行选择:
df.select(explode($"v").as("v" :: Nil )).select($"v.a", $"v.b").show()

这将把v压平成一个包含所有值的表格。无论哪种情况,Spark/Parquet 应该足够聪明以使用谓词下推而不加载c。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接