我希望使用apache flink和Scala来执行max函数,如果最大,则返回最大元素(如果唯一),否则返回-1。为了更好地理解,下面有一个示例:
2
是list[1, 2, 1]
的函数的返回。
-1
是list[3, 3, 1]
的函数的返回值,由于其最大结果为3,但在此最大值的列表中并不是唯一的外观。
我认为我可以通过将所有元素放在seq上来做到这一点,但这在flink之后无法正常工作,因此我尝试使用reduce进行操作,但没有成功:/
有人可以帮忙吗?
答案 0 :(得分:2)
使用Flink API折叠列表。从(0,0)的元组开始。第一个是到目前为止的最大数量,第二个是您找到该数字的次数。
当找到大于元组_1的数字x时,将创建一个元组(x,0)。如果找到小于x的数字,则忽略。如果找到等于x的数字,则将元组的_2递增。
首屏结束时,您将有一个(x,y)元组,其中x是最大数字,y是您发现该数字的次数。
简单的if条件如何帮助您返回x或-1。
编辑:Flink已弃用折叠功能。使用AggregateFunction遍历列表。
答案 1 :(得分:0)
这应该可以解决您的问题
\