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

时间:2016-07-25 03:36:09

标签: dataframe pyspark

这是我的数据框:

enter image description here

我正在寻找基于名称替换城市价值的正确方法,例如,当Alice'然后'纽约'何时'亚历克斯'那么' LA'什么时候' Aaron'然后'北京'什么时候.......

谢谢。

1 个答案:

答案 0 :(得分:1)

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

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,你只需要将操作短语SELECT而不是更新,对于一个简单的映射你可以使用CASE,如果你有更多映射,你应该使用JOIN

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])