Мне нужно создать несколько if в фрейме данных pyspark.
У меня есть две колонки для логического тестирования.
Логика ниже:
- Если в столбце A ИЛИ столбце B содержится «что-то», то напишите «X»
- Иначе, если (Числовое значение в строке столбца A + Числовое значение в строке столбца B)> 100, тогда напишите «X»
- Иначе, если (числовое значение в строке столбца A + числовое значение в строке столбца B)> 50, тогда введите «Y»
- Иначе, если (Числовое значение в строке столбца A + Числовое значение в строке столбца B)> 0, тогда пишите «Z»
- Остальное, затем напишите "T"
к новому столбцу "РЕЗУЛЬТАТ"
Я думал, что самый быстрый метод поиска - это когда иначе, иначе, иначе, иначе и не получилось в запросе ниже.
Буду признателен, если вы предложите более быстрый метод для этого.
Примечание: когда (предложение) .when (предложение) .when (предложение) .when (предложение) .otherwise (предложение) снова и снова просматривает всю таблицу. Я хочу продолжить работу только с несопоставленными данными.
df = df.withColumn('RESULT', F.when(\
F.when((F.col("A").like("%something%") | F.col("B").like("%something%")), "X").otherwise(\
F.when((((F.regexp_extract(F.col("A"), ".(\d+).", 1)) + F.regexp_extract(F.col("B"), ".(\d+).", 1)) > 100), "X").otherwise(\
F.when((((F.regexp_extract(F.col("A"), ".(\d+).", 1)) + F.regexp_extract(F.col("B"), ".(\d+).", 1)) > 29), "Y").otherwise(\
F.when((((F.regexp_extract(F.col("A"), ".(\d+).", 1)) + F.regexp_extract(F.col("B"), ".(\d+).", 1)) > 0), "Z").otherwise(\
"T"))))))
Желаемый выход