这是我的数据框:
我正在寻找基于名称替换城市价值的正确方法,例如,当Alice'然后'纽约'何时'亚历克斯'那么' LA'什么时候' Aaron'然后'北京'什么时候.......
谢谢。
答案 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])