通过


array_position

查找给定数组中给定值的第一个匹配项的位置。 如果任一参数为 null,则返回 null。 位置不是从零开始的,而是基于 1 的索引。 如果在数组中找不到给定值,则返回 0。

Syntax

from pyspark.sql import functions as sf

sf.array_position(col, value)

参数

参数 类型 Description
col pyspark.sql.Column 或 str 要处理的目标列。
value 任意 要查找的值或列表达式。

退货

pyspark.sql.Column:如果找到该值,则位于给定数组中的位置,否则为 0。

例子

示例 1:查找字符串数组中字符串的位置

from pyspark.sql import functions as sf
df = spark.createDataFrame([(["c", "b", "a"],)], ['data'])
df.select(sf.array_position(df.data, "a")).show()
+-----------------------+
|array_position(data, a)|
+-----------------------+
|                      3|
+-----------------------+

示例 2:查找字符串在空数组中的位置

from pyspark.sql import functions as sf
from pyspark.sql.types import ArrayType, StringType, StructField, StructType
schema = StructType([StructField("data", ArrayType(StringType()), True)])
df = spark.createDataFrame([([],)], schema=schema)
df.select(sf.array_position(df.data, "a")).show()
+-----------------------+
|array_position(data, a)|
+-----------------------+
|                      0|
+-----------------------+

示例 3:查找整数数组中整数的位置

from pyspark.sql import functions as sf
df = spark.createDataFrame([([1, 2, 3],)], ['data'])
df.select(sf.array_position(df.data, 2)).show()
+-----------------------+
|array_position(data, 2)|
+-----------------------+
|                      2|
+-----------------------+

示例 4:查找数组中非现有值的位置

from pyspark.sql import functions as sf
df = spark.createDataFrame([(["c", "b", "a"],)], ['data'])
df.select(sf.array_position(df.data, "d")).show()
+-----------------------+
|array_position(data, d)|
+-----------------------+
|                      0|
+-----------------------+

示例 5:查找值为 null 的数组中值的位置

from pyspark.sql import functions as sf
df = spark.createDataFrame([([None, "b", "a"],)], ['data'])
df.select(sf.array_position(df.data, "a")).show()
+-----------------------+
|array_position(data, a)|
+-----------------------+
|                      3|
+-----------------------+

示例 6:查找列值在整数数组中的位置

from pyspark.sql import functions as sf
df = spark.createDataFrame([([10, 20, 30], 20)], ['data', 'col'])
df.select(sf.array_position(df.data, df.col)).show()
+-------------------------+
|array_position(data, col)|
+-------------------------+
|                        2|
+-------------------------+