Apache spark 通过Spark为各个字段执行多个正则表达式规则

Apache spark 通过Spark为各个字段执行多个正则表达式规则,apache-spark,distributed-computing,rule-engine,business-rules,Apache Spark,Distributed Computing,Rule Engine,Business Rules,我们在日常活动中使用spark。在处理过程中,我们希望根据描述列中的一些正则表达式提取地理信息。我们试图找出正则表达式,通过它我们可以提取城市信息,最终我们得到了每个城市CA、NY等的数百个正则表达式 我们已经为city CA和NY等创建了正则表达式的映射,并通过broad casting将这些数据加载到spark中。Ann在自定义udf中使用这些规则来提取城市信息 问题是当规则增加时,执行时间开始增加,因此寻找一些可以以分布式方式执行规则的选项 我们还可以将同样的基于规则的数据提取扩展到其他领

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

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

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

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

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

展望未来

R,
Krish

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

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


如果Spark作业已经进行了最佳并行化,并且只是运行了太多的正则表达式,那么只需获得一个更大的集群,并对其进行更多的并行化

您可以通过尽可能使用字符串插值和/或编写更紧凑的正则表达式来尽量减少正则表达式的数量。然后,您可以使用数据帧映射和模式匹配,而不需要UDF,如图所示,我们已经注意到spark作业利用了所有核心。当我们有了这些正则表达式的时候,它就慢了下来。即使我的工作是以分布式方式处理记录,但每个记录都必须经过多个正则表达式模式,因此速度会变慢。如果是这种情况,那么只需获得更大的集群和更多的并行。我知道,如果没有其他解决方案,这将是最后一个选择。