表之间的PySpark正则表达式匹配

前端之家收集整理的这篇文章主要介绍了表之间的PySpark正则表达式匹配 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试使用PySpark从列中提取正则表达式模式.我有一个包含正则表达式模式的数据框,然后有一个包含我要匹配的字符串的表.

  1. columns = ['id','text']
  2. vals = [
  3. (1,'here is a Match1'),(2,'Do not match'),(3,'Match2 is another example'),(4,(5,'here is a Match1')
  4. ]
  5. df_to_extract = sql.createDataFrame(vals,columns)
  6. columns = ['id','Regex','Replacement']
  7. vals = [
  8. (1,'Match1','Found1'),'Match2','Found2'),]
  9. df_regex = sql.createDataFrame(vals,columns)

我想匹配“ df_to_extract”的“文本”列中的“正则表达式”列.我想针对每个ID提取术语,并在结果表中包含ID和与“ Regex”相对应的“替换”.例如:

  1. +---+------------+
  2. | id| replacement|
  3. +---+------------+
  4. | 1| Found1|
  5. | 3| Found2|
  6. | 5| Found1|
  7. +---+------------+

谢谢!

最佳答案
一种方法是在加入条件下使用pyspark.sql.functions.expr,它允许您将use a column value as a parameter设置为0.

例如:

  1. from pyspark.sql.functions import expr
  2. df_to_extract.alias("e")\
  3. .join(
  4. df_regex.alias("r"),on=expr(r"e.text LIKE concat('%',r.Regex,'%')"),how="inner"
  5. )\
  6. .select("e.id","r.Replacement")\
  7. .show()
  8. #+---+-----------+
  9. #| id|Replacement|
  10. #+---+-----------+
  11. #| 1| Found1|
  12. #| 3| Found2|
  13. #| 5| Found1|
  14. #+---+-----------+

在这里,我使用了sql表达式:

  1. e.text LIKE concat('%','%')

它将连接所有文本行类似于Regex列的行,其中%用作通配符以捕获之前和之后的所有内容.

猜你在找的Python相关文章