配列位置
指定された配列内で指定された値が最初に出現する位置を特定します。いずれかの引数が null の場合、null を返します。位置はゼロベースではなく、1 ベースのインデックスです。指定された値が配列内に見つからなかった場合は 0 を返します。
構文
Python
from pyspark.sql import functions as sf
sf.array_position(col, value)
パラメーター
パラメーター | Type | 説明 |
|---|---|---|
|
| 取り組むターゲットカラム。 |
| すべて | 検索する値または列式。 |
戻り値
pyspark.sql.Column: 指定された配列内で値が見つかった場合はその位置、それ以外の場合は 0 になります。
例
例 1 : 文字列の配列内の文字列の位置を見つける
Python
from pyspark.sql import functions as sf
df = spark.createDataFrame([(["c", "b", "a"],)], ['data'])
df.select(sf.array_position(df.data, "a")).show()
Output
+-----------------------+
|array_position(data, a)|
+-----------------------+
| 3|
+-----------------------+
例2 : 空の配列内の文字列の位置を見つける
Python
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()
Output
+-----------------------+
|array_position(data, a)|
+-----------------------+
| 0|
+-----------------------+
例3 : 整数の配列内の整数の位置を見つける
Python
from pyspark.sql import functions as sf
df = spark.createDataFrame([([1, 2, 3],)], ['data'])
df.select(sf.array_position(df.data, 2)).show()
Output
+-----------------------+
|array_position(data, 2)|
+-----------------------+
| 2|
+-----------------------+
例4 : 配列内の存在しない値の位置を見つける
Python
from pyspark.sql import functions as sf
df = spark.createDataFrame([(["c", "b", "a"],)], ['data'])
df.select(sf.array_position(df.data, "d")).show()
Output
+-----------------------+
|array_position(data, d)|
+-----------------------+
| 0|
+-----------------------+
例5 : nullを含む配列内の値の位置を見つける
Python
from pyspark.sql import functions as sf
df = spark.createDataFrame([([None, "b", "a"],)], ['data'])
df.select(sf.array_position(df.data, "a")).show()
Output
+-----------------------+
|array_position(data, a)|
+-----------------------+
| 3|
+-----------------------+
例6 : 整数配列内の列の値の位置を見つける
Python
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()
Output
+-------------------------+
|array_position(data, col)|
+-------------------------+
| 2|
+-------------------------+