Skip to content

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()