Рассмотрим пример кадра данных:
df =
+-------+-----+
| tech|state|
+-------+-----+
| 70|wa |
| 50|mn |
| 20|fl |
| 50|mo |
| 10|ar |
| 90|wi |
| 30|al |
| 50|ca |
+-------+-----+
Я хочу изменить столбец 'tech' так, чтобы любое значение 50 было изменено на 1, а все остальные значения равны 0.
Вывод будет выглядеть так:
df =
+-------+-----+
| tech|state|
+-------+-----+
| 0 |wa |
| 1 |mn |
| 0 |fl |
| 1 |mo |
| 0 |ar |
| 0 |wi |
| 0 |al |
| 1 |ca |
+-------+-----+
Вот что у меня есть:
from pyspark.sql.functions import UserDefinedFunction
from pyspark.sql.types import StringType
changing_column = 'tech'
udf_first = UserDefinedFunction(lambda x: 1, IntegerType())
udf_second = UserDefinedFunction(lambda x: 0, IntegerType())
first_df = zero_df.select(*[udf_first(changing_column) if column == 50 else column for column in zero_df])
second_df = first_df.select(*[udf_second(changing_column) if column != 50 else column for column in first_df])
second_df.show()