Я хочу изменить значение в определенной ячейке моего Spark DataFrame
, используя PySpark
.
Простой пример - я создаю макет Spark DataFrame
:
df = spark.createDataFrame(
[
(1, 1.87, 'new_york'),
(4, 2.76, 'la'),
(6, 3.3, 'boston'),
(8, 4.1, 'detroit'),
(2, 5.70, 'miami'),
(3, 6.320, 'atlanta'),
(1, 6.1, 'houston')
],
('variable_1', "variable_2", "variable_3")
)
Runnningdisplay(df)
Я получаю эту таблицу:
variable_1 variable_2 variable_3
1 1.87 new_york
4 2.76 la
6 3.3 boston
8 4.1 detroit
2 5.7 miami
3 6.32 atlanta
1 6.1 houston
Допустим, например, я хотел бы назначить новое значение для ячейки в 4-й строке и 3-м столбце, т.е. изменить detroit
для new_orleans
.Я знаю, что назначения df.iloc[4, 3] = 'new_orleans'
или df.loc[4, 'detroit'] = 'new_orleans'
недействительны в Spark
.
Правильный ответ на мой вопрос с использованием when
будет:
from pyspark.sql.functions import when
targetDf = df.withColumn("variable_3", \
when(((df["variable_1"] == 8) & (df["variable_2"] == 4.1)) , 'new_orleans').otherwise(df["variable_3"]))
Мой вопрос: можно ли сделать это более практичным способом в PySpark
без необходимости вводавсе значения и имена столбцов строки, в которой я хочу изменить только одну отдельную ячейку (возможно, достигнуть того же самого без использования функции when
)?
Заранее спасибо за вашу помощь и @ useruser9806664 за его отзыв.