我有一个包含两列的数据帧,地址和街道名称。在
from pyspark.sql.functions import *
import pyspark.sql
df = spark.createDataFrame([\
['108 badajoz road north ryde 2113, nsw, australia', 'north ryde'],\
['25 smart street fairfield 2165, nsw, australia', 'smart street']
],\
['address', 'street_name'])
df.show(2, False)
+------------------------------------------------+---------------+
|address |street_name |
+------------------------------------------------+---------------+
|108 badajoz road north ryde 2113, nsw, australia|north ryde |
|25 smart street fairfield 2165, nsw, australia |smart street |
+------------------------------------------------+---------------+
我想找出street_name
是否存在于address
中,并在新列中返回一个布尔值。我可以像下面这样手动搜索模式。在
但是我想用列street_name
替换手动值,如下所示
df.withColumn("new col", col("street")\
.rlike(concat(lit('.*'),col('street_name'),col('.*))))\
.show(20,False)
只需使用
expr
函数:一个简单的解决方案是定义一个
UDF
并使用它。例如在这里,简单地使用
in
是可能的,但是如果需要更复杂的功能,只需用正则表达式替换它。在只需使用
contains
函数就可以做到这一点。有关详细信息,请参阅this:相关问题 更多 >
编程相关推荐