當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。