【问题标题】:Executing multiple regular expression rules through Spark for various fields通过 Spark 对各个字段执行多个正则表达式规则
【发布时间】:2020-02-05 11:23:23
【问题描述】:

我们在日常活动中使用 spark。在处理过程中,我们希望根据描述列中的一些正则表达式提取地理信息。我们试图找出可以提取 CITY 信息的正则表达式,最终我们为每个城市 CA、NY 等提供了数百个正则表达式。

我们为城市 CA 和 NY 等创建了正则表达式映射,并通过广播将这些数据加载到 spark 中。 Ann 在自定义 udf 中使用这些规则来提取城市信息。

问题是当规则增加时,执行时间开始增加,因此寻找一些可以以分布式方式执行规则的选项。

我们也可以将基于相同规则的数据提取扩展到其他领域。

我还尝试了“Drools”集成火花,如果我没有找到任何优化的解决方案,我可能会选择这个。

期待!!!

R, 克里什

【问题讨论】:

  • 您可以尝试通过尽可能使用字符串插值和/或编写更紧凑的正则表达式来最小化正则表达式的数量。然后您可以使用数据帧映射和模式匹配,而无需 UDF,如 here 所示

标签: apache-spark distributed-computing rule-engine business-rules


【解决方案1】:

请确保您的 Spark 作业使用大量并行性。没有这种小程度的缓慢会感觉更大。从理论上讲,正则表达式处理不应该那么繁重,如果它独立于记录(与其他记录)运行,那么它也将是可扩展的。请避免在大文档上运行正则表达式,而是在文档的不同部分或小文档上并行运行。

请检查您的数据是否分区为 Spark 作业所用 CPU 数量的 3 倍以上。还要避免许多小分区。

如果 Spark 作业已经进行了优化并行化,而只是运行了太多的正则表达式,那么只需获得更大的集群并进一步并行化它。

【讨论】:

  • 我们已经注意 spark 作业会利用所有内核。当我们有了这些正则表达式的那一刻,它就变慢了。甚至我的工作是以分布式方式处理记录,每条记录都必须经过多个正则表达式模式,因此速度变慢了。
  • 如果是这种情况,那么只需获得更大的集群和更多的并行。
  • 我知道,如果我没有其他解决方案,那将是最后的选择。
猜你喜欢
  • 2019-11-15
  • 2013-04-19
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
  • 2019-07-10
  • 2016-07-07
相关资源
最近更新 更多