【发布时间】:2018-10-27 20:04:06
【问题描述】:
我想使用PySpark 更改我的Spark DataFrame 的特定单元格中的值。
简单示例 - 我创建了一个模拟 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")
)
Runnning display(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 中以更实用的方式完成,而无需输入我只想更改 1 个单个单元格的行的所有值和列名(可能在不使用的情况下实现相同when 函数)?
提前感谢您的帮助和@useruser9806664 的反馈。
【问题讨论】:
标签: python apache-spark dataframe pyspark