回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我想用<code>PySpark</code>更改我的<code>Spark DataFrame</code>特定单元格中的值。在</p>
<p>小例子-我创建了一个模拟<code>Spark DataFrame</code>:</p>
<pre><code>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")
)
</code></pre>
<p>运行<code>display(df)</code>我得到这个表:</p>
^{pr2}$
<p>{I{I}为第3行指定一个新值。我知道作为<code>df.iloc[4, 3] = 'new_orleans'</code>或<code>df.loc[4, 'detroit'] = 'new_orleans'</code>的赋值在<code>Spark</code>中无效。在</p>
<p>使用<code>when</code>回答我的问题的有效答案是:</p>
<pre><code>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"]))
</code></pre>
<p>我的问题是:是否可以在<code>PySpark</code>中以更实际的方式完成此操作,而不必输入我只想更改一个单元格的行的所有值和列名(可能在不使用<code>when</code>函数的情况下实现相同的结果)?在</p>
<p>感谢用户@98064的反馈和帮助。在</p>