欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:Flink13基礎(chǔ)-數(shù)據(jù)類型

柚子快報邀請碼778899分享:Flink13基礎(chǔ)-數(shù)據(jù)類型

http://yzkb.51969.com/

一、Flink 支持的數(shù)據(jù)類型

1. Flink 的類型系統(tǒng)

為什么會出現(xiàn)“不支持”的數(shù)據(jù)類型呢?因為 Flink 作為一個分布式處理框架,處理的是

以數(shù)據(jù)對象作為元素的流。如果用水流來類比,那么我們要處理的數(shù)據(jù)元素就是隨著水流漂動

的物體。在這條流動的河里,可能漂浮著小木塊,也可能行駛著內(nèi)部錯綜復(fù)雜的大船。要分布

式地處理這些數(shù)據(jù),就不可避免地要面對數(shù)據(jù)的網(wǎng)絡(luò)傳輸、狀態(tài)的落盤和故障恢復(fù)等問題,這

就需要對數(shù)據(jù)進行序列化和反序列化。小木塊是容易序列化的;而大船想要序列化之后傳輸,

就需要將它拆解、清晰地知道其中每一個零件的類型,會有泛型擦除。

為了方便地處理數(shù)據(jù),F(xiàn)link 有自己一整套類型系統(tǒng)。Flink 使用“類型信息”

(TypeInformation)來統(tǒng)一表示數(shù)據(jù)類型。TypeInformation 類是 Flink 中所有類型描述符的基類。

它涵蓋了類型的一些基本屬性,并為每個數(shù)據(jù)類型生成特定的序列化器、反序列化器和比較器。

2. Flink 支持的數(shù)據(jù)類型

簡單來說,對于常見的 Java 和 Scala 數(shù)據(jù)類型,F(xiàn)link 都是支持的。Flink 在內(nèi)部,F(xiàn)link

對支持不同的類型進行了劃分,這些類型可以在 Types 工具類中找到:

(1)基本類型

所有 Java 基本類型及其包裝類,再加上 Void、String、Date、BigDecimal 和 BigInteger。

(2)數(shù)組類型

包括基本類型數(shù)組(PRIMITIVE_ARRAY)和對象數(shù)組(OBJECT_ARRAY)

(3)復(fù)合數(shù)據(jù)類型

? Java 元組類型(TUPLE):這是 Flink 內(nèi)置的元組類型,是 Java API 的一部分。最多

25 個字段,也就是從 Tuple0~Tuple25,不支持空字段

? Scala 樣例類及 Scala 元組:不支持空字段

? 行類型(ROW):可以認為是具有任意個字段的元組,并支持空字段

? POJO:Flink 自定義的類似于 Java bean 模式的類

(4)輔助類型

Option、Either、List、Map 等

(5)泛型類型(GENERIC)

Flink 支持所有的 Java 類和 Scala 類。不過如果沒有按照上面 POJO 類型的要求來定義,

就會被 Flink 當(dāng)作泛型類來處理。Flink 會把泛型類型當(dāng)作黑盒,無法獲取它們內(nèi)部的屬性;它

們也不是由 Flink 本身序列化的,而是由 Kryo 序列化的。

在這些類型中,元組類型和 POJO 類型最為靈活,因為它們支持創(chuàng)建復(fù)雜類型。而相比之

下,POJO 還支持在鍵(key)的定義中直接使用字段名,這會讓我們的代碼可讀性大大增加。

所以,在項目實踐中,往往會將流處理程序中的元素類型定為 Flink 的 POJO 類型。

Flink 對 POJO 類型的要求如下:

? 類是公共的(public)和獨立的(standalone,也就是說沒有非靜態(tài)的內(nèi)部類);

? 類有一個公共的無參構(gòu)造方法;

? 類中的所有字段是 public 且非 final 的;或者有一個公共的 getter 和 setter 方法,這些

方法需要符合 Java bean 的命名規(guī)范。

所以我們看到,之前的 UserBehavior,就是我們創(chuàng)建的符合 Flink POJO 定義的數(shù)據(jù)類型。

3. 類型提示(Type Hints)

Flink 還具有一個類型提取系統(tǒng),可以分析函數(shù)的輸入和返回類型,自動獲取類型信息,

從而獲得對應(yīng)的序列化器和反序列化器。但是,由于 Java 中泛型擦除的存在,在某些特殊情

況下(比如 Lambda 表達式中),自動提取的信息是不夠精細的——只告訴 Flink 當(dāng)前的元素由

“船頭、船身、船尾”構(gòu)成,根本無法重建出“大船”的模樣;這時就需要顯式地提供類型信

息,才能使應(yīng)用程序正常工作或提高其性能。

為了解決這類問題,Java API 提供了專門的“類型提示”(type hints)。

回憶一下之前的 word count 流處理程序,我們在將 String 類型的每個詞轉(zhuǎn)換成(word,

count)二元組后,就明確地用 returns 指定了返回的類型。因為對于 map 里傳入的 Lambda 表

達式,系統(tǒng)只能推斷出返回的是 Tuple2 類型,而無法得到 Tuple2。只有顯式地

告訴系統(tǒng)當(dāng)前的返回類型,才能正確地解析出完整數(shù)據(jù)。

.map(word -> Tuple2.of(word, 1L))

.returns(Types.TUPLE(Types.STRING, Types.LONG));

這是一種比較簡單的場景,二元組的兩個元素都是基本數(shù)據(jù)類型。那如果元組中的一個元

素又有泛型,該怎么處理呢?

Flink 專門提供了 TypeHint 類,它可以捕獲泛型的類型信息,并且一直記錄下來,為運行

時提供足夠的信息。我們同樣可以通過.returns()方法,明確地指定轉(zhuǎn)換之后的 DataStream 里元

素的類型。

returns(new TypeHint>(){})

柚子快報邀請碼778899分享:Flink13基礎(chǔ)-數(shù)據(jù)類型

http://yzkb.51969.com/

好文鏈接

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19528944.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄