在 Spark 中基于正则表达式过滤和重新分配
Filtering and reassigning based on regex in Spark
我有一个名为 df
的 Spark DataFrame
,如上图所示。有一个名为 region
的列当前只有值 NE
。有一个名为 address
的单独列,其中包含许多地址。我想将 region
的观察结果更改为 VA
,其中 address
以 VA
结尾。我怎样才能做到这一点? pyspark
或 sparkr
命令都可以。
下面的代码片段应该有效。此方法将 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|
+------------+------+
无需将 dataframe 转换为 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|
+------------+------+
我有一个名为 df
的 Spark DataFrame
,如上图所示。有一个名为 region
的列当前只有值 NE
。有一个名为 address
的单独列,其中包含许多地址。我想将 region
的观察结果更改为 VA
,其中 address
以 VA
结尾。我怎样才能做到这一点? pyspark
或 sparkr
命令都可以。
下面的代码片段应该有效。此方法将 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|
+------------+------+
无需将 dataframe 转换为 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|
+------------+------+