Flink四种选择Key的方法

Posted 过往记忆大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flink四种选择Key的方法相关的知识,希望对你有一定的参考价值。

中有许多函数需要我们为其指定key,比如groupBy,Join中的where等。如果我们指定的Key不对,可能会出现一些问题,正如下面的程序:

上面的代码没有任何语法错误,但是我们编译运行这个程序,就会出现以下的异常信息:

Flink四种选择Key的方法

很显然,上面groupBy(0)函数需要我们指定一个key,但是我们为其指定了值为0,而0仅仅对tuple类型的数据有效,所以才导致上面的异常。中指定key的值主要有以下四种方法:

  • 指定key表达式(key expressions)

  • 指定key选择函数

  • 一个或多个字段位置键(field position keys) ,这个仅仅对Tuple类型的DataSet有效)

  • Case Class中的字段

下面我将一一介绍这四种方法的使用。

        指定key expressions

    键表达式指定DataSet中元素的一个或多个字段。 每个键表达式是公共字段的名称或getter方法。点符号可以用于表示整个对象。"*" key表达式表示选择所有的字段。具体使用如下:

    Flink四种选择Key的方法

    这个例子中,需要指定key的函数是groupBy,我们将WC样本类中的word字段作为key表达式,所以上面的代码将会对WC样本类中的word字段进行分组。

        指定Key选择函数

    key选择器函数从DataSet中的元素提取键值。如下:

    Flink四种选择Key的方法

    我们指定了_.word选择函数,这样上面的groupBy函数将会对WC样本类中的word字段进行分组。

        指定Field Position

    如果你的DataSet中存储的元素类型是Tuple,那么我们可以指定Tuple中的Field Position,使用如下:

    Flink四种选择Key的方法

    正如上面代码,我们将Tuple中的第一和第二个field作为key传入groupBy,这样只要Tuple中第一和第二个field相同的元素将会分组到一起。

        指定Case Class中的Fields

    如果你的DataSet中存储的元素类型是样本类(Case Class),那么我们是可以直接指定Case Class中Field的名字,如下:


         如何解决文章开头的问题

    现在我们已经学习了四种指定key的方法,那么文章中最开始那个例子该如何指定我们的key呢?很好办,这里最少有三种方法解决:

    通过指定key expressions实现

    因为我们的DataSet中存储的类型是String,我们可以指定“*”来选择元素中的所有字段,如下:

    (c)2006-2024 SYSTEM All Rights Reserved IT常识