slice(x, start, length)
Описание
Функция slice()
возвращает подмассив, начиная с указанного индекса и заданной длины. Индексы массива начинаются с 1, или с конца, если start отрицательный.
Параметры
x
: Column - массив для срезаstart
: int - начальный индекс (1-базированный)length
: int - длина подмассива
Возвращаемое значение
Array - подмассив указанной длины
Пример использования
from pyspark.sql.functions import slice, array, lit
# Создаем DataFrame с массивами
df = spark.createDataFrame([
([1, 2, 3, 4, 5],),
(["a", "b", "c", "d", "e"],),
(None,)
], ["array_col"])
# Получаем срезы
df.select(
"array_col",
slice("array_col", 2, 3).alias("slice_2_3"),
slice("array_col", -3, 2).alias("slice_neg3_2")
).show(truncate=False)
# Результат:
# +------------+---------+------------+
# |array_col |slice_2_3|slice_neg3_2|
# +------------+---------+------------+
# |[1, 2, 3, 4, 5]|[2, 3, 4]|[3, 4] |
# |[a, b, c, d, e]|[b, c, d]|[c, d] |
# |null |null |null |
# +------------+---------+------------+
# Пример с разными длинами
df = spark.createDataFrame([
([10, 20, 30, 40],),
([100, 200, 300],)
], ["numbers"])
df.select(
"numbers",
slice("numbers", 1, 2).alias("first_two"),
slice("numbers", -2, 2).alias("last_two")
).show(truncate=False)
Примечания
- Если массив NULL, возвращается NULL
- Если start выходит за пределы массива, возвращается пустой массив
- Если length отрицательный или 0, возвращается пустой массив
- Для получения элемента по индексу используйте
element_at()
- Для получения размера массива используйте
array_size()
- Для создания массива используйте
array()