Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MapReduce如何检查两个表中是否都存在键左连接_Java_Hadoop_Join_Mapreduce - Fatal编程技术网

Java MapReduce如何检查两个表中是否都存在键左连接

Java MapReduce如何检查两个表中是否都存在键左连接,java,hadoop,join,mapreduce,Java,Hadoop,Join,Mapreduce,我有两个映射方法将其发送到我的减速机 键/值 number1 value1 number2 value2 number3 value3 number4 value10 number1 value4 number2 value5 number5 value6 number6 value7 及 键/值 number1 value4 number2 value5 number5 value6 number6 value7 所以减速机是这样接收它们的 number1 value1 value4 n

我有两个映射方法将其发送到我的减速机

键/值

number1 value1
number2 value2
number3 value3
number4 value10
number1 value4
number2 value5
number5 value6
number6 value7
及 键/值

number1 value4
number2 value5
number5 value6
number6 value7
所以减速机是这样接收它们的

number1 value1 value4
number2 value2 value5
number3 value3
number4 value10
number5 value6
number6 value7
如何仅将值存在于表1中的对添加到上下文中

也许有一种方法不将这些值传递给减速器

number5 value6
number6 value7
只传递这些

number1 value1 value4
number2 value2 value5
number3 value3
number4 value10
我想在表1中每个值的开头加上一个词,然后检查它是否存在于减速机中

for (Text value: values) {
    String[] stringValue = value.toString().split(" ");
    if (stringValue[0].equals("checkValue")) {
        boo = 1;
但这不起作用,代码中有太多不必要的
if-else

public class Reduce extends Reducer<Text, Text, Text, Text> {
    UtilClass utilClass = new UtilClass();
    String result = "";
    Text theKey = null;
    int boo = 0;

    @Override
    public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
        String string = "";
        // send only date type values
        HashMap<Text, Integer> m = new HashMap<>();
        // Populate the HashMap
        for (Text value : values) {
            String[] stringValue = value.toString().split(" ");
            if (stringValue[0].equals("cdr")) {
                boo = 1;
                Text element = new Text(utilClass.getPeriod(stringValue[1] + " " + stringValue[2]));
                if (m.get(element) == null) {
                    m.put(element, 1);
                } else {
                    m.put(element, m.get(element) + 1);
                }
            } else {
                if (string.equals("")) {
                    string = stringValue[1] + " " + stringValue[2] + " " + stringValue[3];
                } else if (stringValue[4].equals("A") || stringValue[4].equals("S")) {
                    string = stringValue[1] + " " + stringValue[2] + " " + stringValue[3];
                }
            }
        }

        if (boo == 1) {
            // Display the frequencies
            for (Map.Entry<Text, Integer> entry : m.entrySet()) {
                if (theKey != key) {
                    result = "";
                    theKey = key;
                }
                result += entry.getValue() + "_" + entry.getKey() + " ";
            }

            // add BAN_KEY; MARKET_KEY_SRC;ACCOUNT_TYPE_KEY
            result = string + " " + result;

            // add rest for every entry
            context.write(key, new Text(result));
        } else {
            context.write(key, new Text(result));
        }
    }
}
公共类Reduce扩展Reducer{
UtilClass UtilClass=新UtilClass();
字符串结果=”;
Text theKey=null;
int boo=0;
@凌驾
公共void reduce(文本键、Iterable值、上下文上下文)引发IOException、InterruptedException{
字符串=”;
//仅发送日期类型值
HashMap m=新的HashMap();
//填充HashMap
用于(文本值:值){
字符串[]stringValue=value.toString().split(“”);
if(stringValue[0]。等于(“cdr”)){
boo=1;
Text元素=新文本(utilClass.getPeriod(stringValue[1]+“”+stringValue[2]);
if(m.get(element)==null){
m、 put(元素1);
}否则{
m、 put(元素,m.get(元素)+1);
}
}否则{
if(string.equals(“”){
string=stringValue[1]+“”+stringValue[2]+“”+stringValue[3];
}else if(stringValue[4]。等于(“A”)| | stringValue[4]。等于(“S”)){
string=stringValue[1]+“”+stringValue[2]+“”+stringValue[3];
}
}
}
如果(boo==1){
//显示频率
对于(Map.Entry:m.entrySet()){
if(theKey!=key){
结果=”;
钥匙=钥匙;
}
结果+=entry.getValue()+“”+entry.getKey()+”;
}
//添加BAN_KEY;MARKET_KEY_SRC;ACCOUNT_TYPE_KEY
结果=字符串+“”+结果;
//为每个条目添加rest
编写(键,新文本(结果));
}否则{
编写(键,新文本(结果));
}
}
}

我正试图左键连接这些表。我不能使用hive和其他工具。

你能从内存中的表1加载键吗?@Adam你的意思是创建一个单独的集合/映射来保存这些键吗?那可能行得通。我试试看。