在指定的陣列索引下插入一個項目。 陣列索引從 1 開始,若索引為負則從末尾開始。 超過陣列大小的索引會附加陣列,或如果索引為負,則會在陣列前加上「空」元素。
語法
from pyspark.sql import functions as sf
sf.array_insert(arr, pos, value)
參數
| 參數 | 類型 | Description |
|---|---|---|
arr |
pyspark.sql.Column 或 str |
包含陣列的欄位名稱 |
pos |
pyspark.sql.Column、str 或 int |
數值欄位名稱,指示插入位置(從索引 1 開始,負位置則從陣列後方開始) |
value |
任意 | 一個字面值,或欄位表達式。 |
退貨
pyspark.sql.Column:一個包含新指定值的值陣列
範例
範例 1:在特定位置插入一個值
from pyspark.sql import functions as sf
df = spark.createDataFrame([(['a', 'b', 'c'],)], ['data'])
df.select(sf.array_insert(df.data, 2, 'd')).show()
+------------------------+
|array_insert(data, 2, d)|
+------------------------+
| [a, d, b, c]|
+------------------------+
範例 2:在負位置插入一個值
from pyspark.sql import functions as sf
df = spark.createDataFrame([(['a', 'b', 'c'],)], ['data'])
df.select(sf.array_insert(df.data, -2, 'd')).show()
+-------------------------+
|array_insert(data, -2, d)|
+-------------------------+
| [a, b, d, c]|
+-------------------------+
範例 3:在大於陣列大小的位置插入一個值
from pyspark.sql import functions as sf
df = spark.createDataFrame([(['a', 'b', 'c'],)], ['data'])
df.select(sf.array_insert(df.data, 5, 'e')).show()
+------------------------+
|array_insert(data, 5, e)|
+------------------------+
| [a, b, c, NULL, e]|
+------------------------+
範例 4:插入 NULL 值
from pyspark.sql import functions as sf
df = spark.createDataFrame([(['a', 'b', 'c'],)], ['data'])
df.select(sf.array_insert(df.data, 2, sf.lit(None))).show()
+---------------------------+
|array_insert(data, 2, NULL)|
+---------------------------+
| [a, NULL, b, c]|
+---------------------------+
範例 5:將值插入 NULL 陣列
from pyspark.sql import functions as sf
from pyspark.sql.types import ArrayType, IntegerType, StructType, StructField
schema = StructType([StructField("data", ArrayType(IntegerType()), True)])
df = spark.createDataFrame([(None,)], schema=schema)
df.select(sf.array_insert(df.data, 1, 5)).show()
+------------------------+
|array_insert(data, 1, 5)|
+------------------------+
| NULL|
+------------------------+