gpt4 book ai didi

java - 优化PIG中的过滤功能

转载 作者:行者123 更新时间:2023-12-01 15:22:45 26 4
gpt4 key购买 nike

我已经为我的 pig 脚本编写了一个过滤函数,但我的工作花费了太多时间。在 5 节点集群上处理的数据量为 15 GB。

任何人都可以建议如何优化我的代码:

     package org.apache.pig.builtin;
import java.util.*;
import java.io.IOException;
import java.util.Map;
import org.apache.pig.FilterFunc;
import org.apache.pig.backend.executionengine.ExecException;
import org.apache.pig.data.DataBag;
import org.apache.pig.data.Tuple;
import org.apache.pig.data.DataType;
import org.apache.pig.impl.util.WrappedIOException;

public class filterIP extends FilterFunc {
ArrayList<String> Ar1=new ArrayList<String>(){
{
add("151.193.220.28");
....
//Around 2000 IP's to be filtered
add("129.22.63.207");
}
};
public Boolean exec(Tuple input) throws IOException {
if (input == null || input.size() == 0)
return true;
try {
Object values = input.get(0);
if (values instanceof DataBag)
return ((DataBag)values).size() == 0;
else if (values instanceof Map)
return ((Map)values).size() == 0;
else if (values instanceof String){

for(String s:Ar1){
if(((String)values).matches(".*"+s+".*"))
return false;
}
return true;
//return !((String)values).matches(".*"+Ar1.get(1)+".*");
}
else{
return false;
// throw new IOException("Cannot test a " + DataType.findTypeName(values) + " for required match.");
}
} catch (ExecException ee) {
throw WrappedIOException.wrap("Caught exception processing input row ", ee);
}
}
}*

最佳答案

使用 HashSet 而不是 ArrayList - for (String s:Ar1) 是您的瓶颈。

您是否尝试通过一组 IP 地址过滤字段?, 您能否将 matches() 调用替换为 set.contains(values)?但是,只有当您的值仅包含 IP 地址并且没有前/后修复字符时,这才有效 - 但我确信您可以编写一个正则表达式来首先查找 IP 地址字符串,提取它,然后根据哈希检查成员资格设置。

关于java - 优化PIG中的过滤功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10648806/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com