Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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 如何返回数据集中具有最大长度的行_Java_Apache Flink - Fatal编程技术网

Java 如何返回数据集中具有最大长度的行

Java 如何返回数据集中具有最大长度的行,java,apache-flink,Java,Apache Flink,我已经用正确的代码更新了代码,这是一个可能的解决方案 /******************************************/ 我有一个元组数据集,其中包含两个值(stringline,integer length\u of\u line),我试图返回最大length\u of\u line 我尝试使用.maxBy()函数,但输出只有一个元组 公共类PalindromeTaskImpl实现PalindromeTask{ @凌驾 公共集求解(字符串输入文件)引发异常{ 类回文检查

我已经用正确的代码更新了代码,这是一个可能的解决方案

/******************************************/

我有一个元组数据集,其中包含两个值(
stringline,integer length\u of\u line
),我试图返回最大
length\u of\u line

我尝试使用
.maxBy()
函数,但输出只有一个元组


公共类PalindromeTaskImpl实现PalindromeTask{
@凌驾
公共集求解(字符串输入文件)引发异常{
类回文检查器实现FlatMapFunction{
@凌驾
公共void平面图(字符串str,收集器out){
字符串whatever=新字符串(str);
str=str.replace(“,”);
int startIndex=0;
int endIndex=str.length()-1;
while(开始索引<结束索引){
char getAtl=str.charAt(startIndex);
char getAth=str.charAt(endIndex);
if(getAtl!=getAth){
out.collect(新的Tuple2(str,0));
返回;
}
startIndex++;
endIndex--;
}
out.collect(新的Tuple2(无论如何,str.length());
}
}
ExecutionEnvironment env=ExecutionEnvironment.getExecutionEnvironment();
//数据集inputData=env.readTextFile(inputFile);
数据集inputData=env.fromElements(
“abc cba 33\n”+
“abc cba cba cba\n”+
“4 qwer fg gf rewq 4\n”+
“一个qder fg gf redq a\n”+
“qder fg abc cba gf redq a\n”+
“abcde abcde edcba edcba 33”
);
DataSet oneLine=inputData.flatMap(新的FlatMapFunction(){
公共void平面图(字符串值,收集器单行){
对于(字符串标记:value.split(“\n”)){
收集(代币);
}
}
});
数据集回文检查结果=
flatMap(新的回文检查器());
数据集palindrome句子=PalindromeCheckerResults.maxBy(1);
int maxVal=回文句子.collect().get(0).f1;
数据集结果=
PalindromeCheckerResults.filter(新的FilterFunction(){
@凌驾
公共布尔筛选器(Tuple2 stringIntegerTuple2)引发异常{
返回stringIntegerTuple2.f1==maxVal;
}
})
.flatMap(新的flatMap函数(){
公共void平面图(Tuple2值,收集器结果){
{result.collect(value.f0);
}
}
});
设置finalSetResult=null;
试一试{
finalSetResult=新哈希集(result.collect());
}捕获(例外e){
e、 printStackTrace();
}
返回最终结果;
}
}
上面的函数palindrome检查该行是否为回文行,如果是回文行,则返回该行及其长度;如果不是回文行,则返回0。输出为
tuple2(字符串,整数)
。 当我使用
sampleData.flatMap(new PalindromeCheck()).maxBy(1)运行它时输出上方的代码为:

(a四年期fg gf redq a,19)

而预期的结果应该是:

(4 qwer fg gf rewq 4,19)


(a qder fg gf redq a,19)

最大值不应该是
abcde abcde edcba edcba 33
?这仅仅是一个结果。你是怎么得到行数的呢?默认的linespliter不能做到这一点对不起,我的错误我添加了错误的代码,这是误导
maxBy
返回每个组的单个值或所有元组的单个值。如果你想要最大值的所有元组,你必须首先计算最大值,然后根据这个值进行过滤。我知道这与sql的概念非常相似,但我不知道如何做到这一点,我对Java和Flink:D是新手