我正在尝试使用apache spark来解析存储在hadoop上的18 GB文本数据。我的解析算法包括将400个模式与文本文件中的每一行进行比较。
算法将文件加载到RDD中,然后运行过滤操作以识别与400个模式中的至少一个模式匹配的行。
当我在我们的5节点hadoop集群上运行时,我将在8分钟内完成工作。我认为它可以进一步改进,但我不知道该怎么做。
以下是我的一些火花配置
spark.executor.instances 5
spark.executor.cores 30
spark.executor.memory 6g
Java代码
logLines = javaSparkContext.textFile(logFile);
JavaRDD<String> lineWithPatternMatchRDD = logLines.filter(new Function<String, Boolean>() {
public Boolean call(String lineText) {
for (Pattern pat : patternList) {
if (pat.PatternType == "SubString") {
if (lineText.indexOf(pat.getText()) >= 0) {
return true;
}
} else if (pat.PatternType == "Regex") {
//Get pattern from map of pre compiled patterns
Pattern p = patternsMap.get(pat.getText());
Matcher m = p.matcher(lineText);
if (m.matches()) {
return true;
}
}
}
return false;
}
});
System.out.println(lineWithPatternMatchRDD.count());