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