当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python PySpark SQL Functions element_at方法用法及代码示例


PySpark SQL 函数的 element_at(~) 方法用于从 PySpark 列中的列表或映射中提取值。

参数

1.col | stringColumn

要从中提取值的列表或映射的列。

2. extraction | int

您要提取的值的位置。支持负定位 - extraction=-1 将从每个列表中提取最后一个元素。

警告

该位置不是基于索引的。这意味着 extraction=1 将提取列表或映射中的第一个值。

返回值

新的 PySpark 列。

例子

从 PySpark 列中的数组中提取 n-th 值

考虑以下包含一些列表的 PySpark DataFrame:

rows = [[[5,6]], [[7,8]]]
df = spark.createDataFrame(rows, ['vals'])
df.show()



+------+
|  vals|
+------+
|[5, 6]|
|[7, 8]|
+------+

要从 vals 中的每个列表中提取第二个值,我们可以使用 element_at(~) ,如下所示:

df_res = df.select(F.element_at('vals',2).alias('2nd value'))
df_res.show()



+---------+
|2nd value|
+---------+
|        6|
|        8|
+---------+

在此,请注意以下事项:

  • 位置 2 不是基于索引的。

  • 我们使用 alias(~) 方法为 element_at(~) 返回的列分配标签。

请注意,提取超出范围的值将返回 null

df_res = df.select(F.element_at('vals',3))
df_res.show()



+-------------------+
|element_at(vals, 3)|
+-------------------+
|               null|
|               null|
+-------------------+

我们还可以通过为 extraction 提供负值来提取最后一个元素:

df_res = df.select(F.element_at('vals',-1).alias('last value'))
df_res.show()



+----------+
|last value|
+----------+
|         6|
|         8|
+----------+

从 PySpark 列中的Map中提取值

考虑以下包含一些 dict 值的 PySpark DataFrame:

rows = [[{'A':4}], [{'A':5, 'B':6}]]
df = spark.createDataFrame(rows, ['vals'])
df.show()



+----------------+
|            vals|
+----------------+
|        {A -> 4}|
|{A -> 5, B -> 6}|
+----------------+

要提取 vals 列中具有键 'A' 的值:

df_res = df.select(F.element_at('vals', F.lit('A')))
df_res.show()



+-------------------+
|element_at(vals, A)|
+-------------------+
|                  4|
|                  5|
+-------------------+

请注意,使用不存在的键提取值将返回 null

df_res = df.select(F.element_at('vals', F.lit('B')))
df_res.show()



+-------------------+
|element_at(vals, B)|
+-------------------+
|               null|
|                  6|
+-------------------+

此处,键 'B' 不存在于映射 {'A':4} 中,因此为该行返回了 null

相关用法


注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 PySpark SQL Functions | element_at method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。