我有一个名为DataFrame
的Spark df
,如上图所示。有一个名为region
的列当前只有值NE
。有一个名为address
的单独列,其中包含许多地址。我想将region
的观察结果更改为VA
,其中address
以VA
结尾。我怎样才能做到这一点? pyspark
或sparkr
命令都可以使用。
答案 0 :(得分:1)
以下代码段应该有用。此方法将Dataframe转换为RDD并执行映射操作以适当地更改区域。
>>> df = sc.parallelize([("NE","NE"), ("Luray, VA", "NE"), ("VA" ,"NE"), ("Richmond, VA", "NE")]).toDF(["address", "region"])
>>> df.rdd.map(lambda (x,y): (x,'VA' if x.endswith('VA') else y)).toDF(["address", "region"]).show()
+------------+------+
| address|region|
+------------+------+
| NE| NE|
| Luray, VA| VA|
| VA| VA|
|Richmond, VA| VA|
+------------+------+
没有将数据帧转换为rdd的方法如下所示。注意:这种方法优于rdd方法,因为它更高效,并且对模式的假设更少。
from pyspark.sql.functions import udf
df = sc.parallelize([("NE","NE"), ("Luray, VA", "NE"), ("VA" ,"NE"), ("Richmond, VA", "NE")]).toDF(["address", "region"])
regionfunc = udf(lambda x: 'VA' if x.endswith('VA') else x)
df.withColumn('region', regionfunc(df.address)).show()
+------------+------+
| address|region|
+------------+------+
| NE| NE|
| Luray, VA| VA|
| VA| VA|
|Richmond, VA| VA|
+------------+------+