Я пытаюсь объединить логику для этого фрагмента кода в PySpark, чтобы уменьшить количество повторений кода. Любое руководство будет по достоинству оценено:

col0 = when(visit[1] == '0', to_date(visit[0])).otherwise(None)
col1 = when(visit[1] == '1', to_date(visit[0])).otherwise(None)
-3
codingenthusiast 21 Дек 2019 в 02:46

2 ответа

Лучший ответ

Вы можете сделать это, используя назначение деструктурирования и выражение генератора:

col0, col1 = (when(visit[1] == c, to_date(visit[0])).otherwise(None) for c in '01')
1
kaya3 20 Дек 2019 в 23:49

col = {i: when(visit[1] == f'{i}, to_date(visit[0])).otherwise(None) for col in (1,2)}

Примечание: для 2 столбцов вы получаете одну строку, но дополнительные затраты с точки зрения субъективной ясности кода значительно превышают выигрыш; предлагаемое решение, вероятно, стоит только для 3+ столбцов

0
foxale 20 Дек 2019 в 23:50