Skip to content

find_in_set(str, str_array)

Описание

Функция find_in_set() возвращает позицию (начиная с 1) заданной строки в списке строк, разделенных запятыми. Если строка не найдена, возвращает 0.

Параметры

  • str: string или Column - строка для поиска
  • str_array: string или Column - строка, содержащая список значений, разделенных запятыми

Возвращаемое значение

Integer - позиция строки в списке (начиная с 1) или 0, если строка не найдена

Пример использования

from pyspark.sql.functions import find_in_set

# Создаем DataFrame
df = spark.createDataFrame([
    ("apple", "apple,banana,orange"),
    ("banana", "apple,banana,orange"),
    ("orange", "apple,banana,orange"),
    ("grape", "apple,banana,orange"),
    ("apple", None),
    (None, "apple,banana,orange")
], ["fruit", "fruit_list"])

# Ищем позицию фрукта в списке
df.select(
    "fruit",
    "fruit_list",
    find_in_set("fruit", "fruit_list").alias("position")
).show()

# Результат:
# +------+-------------------+--------+
# | fruit|         fruit_list|position|
# +------+-------------------+--------+
# | apple|apple,banana,orange|       1|  # apple на первой позиции
# |banana|apple,banana,orange|       2|  # banana на второй позиции
# |orange|apple,banana,orange|       3|  # orange на третьей позиции
# | grape|apple,banana,orange|       0|  # grape не найден
# | apple|               null|    null|  # NULL в списке
# |  null|apple,banana,orange|    null|  # NULL в искомом значении
# +------+-------------------+--------+

Примечания

  • Поиск чувствителен к регистру
  • Если любой из аргументов NULL, результат NULL
  • Позиции нумеруются с 1
  • Если строка не найдена, возвращается 0
  • Функция полезна для работы с данными в формате CSV или списками значений
  • Для поиска в массивах используйте array_contains()