gpt4 book ai didi

java - 变量不能传递到for循环中

转载 作者:行者123 更新时间:2023-12-01 22:40:57 24 4
gpt4 key购买 nike

我有一个数据帧,包括发送者(id,int),接收者(id,int),通信时间(int)。

A B C
1 5 10
1 6 20
1 7 20
1 8 11

我的目标是找到最大通信次数并返回1 6,20(格式为A B,C)由于A1、B6和A1、B7的最大通信次数都是20,所以我只需要保留最小的B id号即可。

在映射步骤中,我已经将 A 作为键,(B,C) 作为值。

到目前为止,我可以返回 A 和 max C 的输出,但无法返回 B 值。我下面的代码无法更改 min_Receiver,我该如何解决这个问题?

public static class IntSumReducer
extends Reducer<Text,Text,Text,Text> {
//private IntWritable result = new IntWritable();

public void reduce(Text key, Iterable<Text> values,
Context context
) throws IOException, InterruptedException {
int max_val = 0;
int val_str = 0;
int val_str_1 = 0;
int min_Receiver = Integer.MAX_VALUE;
int tempReceiver = 0;
for (Text val : values) {
String[] compositeString = val.toString().split(",");
val_str = Integer.parseInt(compositeString[1]);
//tempReceiver = Integer.parseInt(compositeString[0]);
if( val_str>max_val) {
max_val = val_str;

}


}

for (Text val_1 : values){
String[] compositeString = val_1.toString().split(",");
tempReceiver = Integer.parseInt(compositeString[0]);
val_str_1 = Integer.parseInt(compositeString[1]);

if (val_str_1 == max_val && tempReceiver < min_Receiver)
{
min_Receiver =tempReceiver;
}

}

//result.set(max_val);
context.write(key, new Text(min_Receiver + "," + max_val));}}

预期输出为

1 6,20

实际输出是

1 2147483647,20

在 map 中,我已经将 A 分隔为键,将 B、C 分隔为值。所以compositeString包含两个变量。值的格式为 B,C。

最佳答案

取决于你的定界符是什么

使用这样的行来获取具有最大时间的Text

Optional<Text> answer = StreamSupport.stream(values.spliterator(),false)  //all this does is get you a stream of Text
.max(Comparator.comparingInt(s->getComTime(s))); // return the object that evaluates to the max value if one exists

同时创建一个从字符串/文本获取通信时间的方法,如下所示:

private static int getComTime(Text line){
String[] vals = line.toString().split(",");
return Integer.parseInt(vals[2]);
}

.stream() 的 boolean 选项是如果您想要顺序 =false 或并行 =true .... 如果您的分隔符不同或对象是略有不同,您可能需要调整 getComTime 但这应该非常接近正确。

如果您想以这种方式处理它,请获取一个Optional。

那么你可以这样做

if(answer.isPresent()){/* got an answer do something with it */}

***抱歉,我用字符串而不是文本完成了大部分工作,但已更新,如果有任何问题请告诉我。

关于java - 变量不能传递到for循环中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58496984/

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