Flink10:Flink支持的數(shù)據(jù)類型

Flink流應用程序處理的是以數(shù)據(jù)對象表示的事件流。所以在Flink內部,我們需要能夠處理這些對象。它們需要被序列化和反序列化,以便通過網(wǎng)絡傳送它們;或者從狀態(tài)后端、檢查點和保存點讀取它們。為了有效地做到這一點,F(xiàn)link需要明確知道應用程序所處理的數(shù)據(jù)類型。Flink使用類型信息的概念來表示數(shù)據(jù)類型,并為每個數(shù)據(jù)類型生成特定的序列化器、反序列化器和比較器。
Flink還具有一個類型提取系統(tǒng),該系統(tǒng)分析函數(shù)的輸入和返回類型,以自動獲取類型信息,從而獲得序列化器和反序列化器。但是,在某些情況下,例如lambda函數(shù)或泛型類型,需要顯式地提供類型信息,才能使應用程序正常工作或提高其性能。
Flink支持Java和Scala中所有常見數(shù)據(jù)類型。使用最廣泛的類型有以下幾種。

1.基礎數(shù)據(jù)類型

Flink支持所有的Java和Scala基礎數(shù)據(jù)類型,Int, Double, Long, String, …?

val numbers: DataStream[Long] = env.fromElements(1L, 2L, 3L, 4L)
numbers.map( n => n + 1 )
2.Java和Scala元組(Tuples)
val persons: DataStream[(String, Integer)] = env.fromElements( 
("Adam", 17), 
("Sarah", 23) ) 
persons.filter(p => p._2 > 18)
3.Scala樣例類(case classes)
case class Person(name: String, age: Int) 
val persons: DataStream[Person] = env.fromElements(
Person("Adam", 17), 
Person("Sarah", 23) )
persons.filter(p => p.age > 18)
4.Java簡單對象(POJOs)
public class Person {
public String name;
public int age;
  public Person() {}
  public Person(String name, int age) { 
this.name = name;      
this.age = age;  
}
}
DataStream<Person> persons = env.fromElements(   
new Person("Alex", 42),   
new Person("Wendy", 23));
5.其它(Arrays, Lists, Maps, Enums, 等等)

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

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容