Flink基礎系列18-支持的數據類型 一.Flink支持的數據類型 參考:

一.Flink支持的數據類型

Flink流應用程序處理的是以數據對象表示的事件流。所以在Flink內部,我們需要能夠處理這些對象。它們需要被序列化和反序列化,以便通過網絡傳送它們;或者從狀態後端、檢查點和保存點讀取它們。爲了有效地做到這一點,Flink需要明確知道應用程序所處理的數據類型。Flink使用類型信息的概念來表示數據類型,併爲每個數據類型生成特定的序列化器、反序列化器和比較器。

Flink還具有一個類型提取系統,該系統分析函數的輸入和返回類型,以自動獲取類型信息,從而獲得序列化器和反序列化器。但是,在某些情況下,例如lambda函數或泛型類型,需要顯式地提供類型信息,才能使應用程序正常工作或提高其性能。

Flink支持Java和Scala中所有常見數據類型。使用最廣泛的類型有以下幾種。

1.1 基礎數據類型

Flink支持所有的Java和Scala基礎數據類型,Int, Double, Long, String, …

DataStream<Integer> numberStream = env.fromElements(1, 2, 3, 4);
numberStream.map(data -> data * 2);

1.2 Java和Scala元組(Tuples)

java不像Scala天生支持元組Tuple類型,java的元組類型由Flink的包提供,默認提供Tuple0~Tuple25

DataStream<Tuple2<String, Integer>> personStream = env.fromElements( 
  new Tuple2("Adam", 17), 
  new Tuple2("Sarah", 23) 
); 
personStream.filter(p -> p.f1 > 18);

1.3 Scala樣例類(case classes)

case class Person(name:String,age:Int)

val numbers: DataStream[(String,Integer)] = env.fromElements(
  Person("張三",12),
  Person("李四",23)
)

1.4 Java簡單對象(POJO)

java的POJO這裏要求必須提供無參構造函數
成員變量要求都是public(或者private但是提供get、set方法)

public class Person{
  public String name;
  public int age;
  public Person() {}
  public Person( String name , int age) {
    this.name = name;
    this.age = age;
  }
}
DataStream Pe rson > persons = env.fromElements(
  new Person (" Alex", 42),
  new Person (" Wendy",23)
);

1.5 其他(Arrays, Lists, Maps, Enums,等等)

Flink對Java和Scala中的一些特殊目的的類型也都是支持的,比如Java的ArrayList,HashMap,Enum等等。

參考:

  1. https://www.bilibili.com/video/BV1qy4y1q728
  2. https://ashiamd.github.io/docsify-notes/#/study/BigData/Flink/%E5%B0%9A%E7%A1%85%E8%B0%B7Flink%E5%85%A5%E9%97%A8%E5%88%B0%E5%AE%9E%E6%88%98-%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0?id=_521-%e4%bb%8e%e9%9b%86%e5%90%88%e8%af%bb%e5%8f%96%e6%95%b0%e6%8d%ae
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章