Dataframe 如何使用pySpark更改数据帧中的单元格值?

Dataframe 如何使用pySpark更改数据帧中的单元格值?,dataframe,pyspark,Dataframe,Pyspark,这是我的数据框: 我正在寻找一种正确的方法,根据名称替换城市的价值,例如,案例名称为“Alice”,然后是“New York”,然后是“Alex”,然后是“LA”,然后是“Aaron”,然后是“Beijing”,当 谢谢。最简单的方法可能是将映射存储在第二个数据帧中,并将它们连接在一起: val df = sqlContext.read.json(sc.parallelize( """{"name":"Alice", "age":21, "city":"Toronto"}""" :: Nil

这是我的数据框:

我正在寻找一种正确的方法,根据名称替换城市的价值,例如,案例名称为“Alice”,然后是“New York”,然后是“Alex”,然后是“LA”,然后是“Aaron”,然后是“Beijing”,当


谢谢。

最简单的方法可能是将映射存储在第二个数据帧中,并将它们连接在一起:

val df = sqlContext.read.json(sc.parallelize(
  """{"name":"Alice", "age":21, "city":"Toronto"}""" :: Nil))

val mapping = sqlContext.read.json(sc.parallelize(
  """{"name":"Alice", "newcity":"New York"}""" :: Nil))

df.join(mapping, "name").select("name", "age", "newcity").collect
// Array[org.apache.spark.sql.Row] = Array([Alice,21,New York])
另一种选择是只编写SQL,您只需将操作表述为选择而不是更新,对于简单的映射,您可以使用用例,如果您有更多映射,则应使用联接:


如果有两个规则,您可以映射一个函数来实现这一点,否则您可能希望将映射规则保留在另一个数据帧中,并执行一个操作。有什么例子吗?或者链接?难道没有办法根据标准更新记录吗?就像在SQL:updatetable set col1='value2'中id=1 Hi@maxymoo一样,如何使用Spark数据帧的索引来实现这一点?例如,将第1行从第3列从“Aaron”更改为“Albert”?类似于Python的熊猫:df.iloc[1,3]=“Albert”或df.loc[1,city]=“Albert”。提前感谢您的回复。@NuValue spark dataframes没有索引的概念,如果需要,您可以这样做。但更一般地说,您可以使用映射到整个数据帧的函数来执行值替换,而不是编辑单个元素。或者您可以临时转换为数据帧并执行替换。
df.registerTempTable("df")
sqlContext.sql("""select name, 
                         age, 
                         case when name = 'Alice' then 'New York' end as city                   
                         from df""").collect()

// Array[org.apache.spark.sql.Row] = Array([Alice,21,New York])