- Flink流應(yīng)用程序處理的是以數(shù)據(jù)對(duì)象表示的事件流魄鸦。所以在Flink內(nèi)部前酿,我們需要能夠處理這些對(duì)象。它們需要被序列化和反序列化茅茂,以便通過(guò)網(wǎng)絡(luò)傳送它們捏萍;或者從狀態(tài)后端、檢查點(diǎn)和保存點(diǎn)讀取它們空闲。為了有效地做到這一點(diǎn)令杈,F(xiàn)link需要明確知道應(yīng)用程序所處理的數(shù)據(jù)類型。Flink使用類型信息的概念來(lái)表示數(shù)據(jù)類型碴倾,并為每個(gè)數(shù)據(jù)類型生成特定的序列化器逗噩、反序列化器和比較器。
- Flink還具有一個(gè)類型提取系統(tǒng)影斑,該系統(tǒng)分析函數(shù)的輸入和返回類型给赞,以自動(dòng)獲取類型信息,從而獲得序列化器和反序列化器矫户。但是片迅,在某些情況下,例如lambda函數(shù)或泛型類型皆辽,需要顯式地提供類型信息柑蛇,才能使應(yīng)用程序正常工作或提高其性能。
Flink支持Java和Scala中所有常見數(shù)據(jù)類型驱闷。使用最廣泛的類型有以下幾種耻台。
package com.atguigu.apiTest
import org.apache.flink.streaming.api.scala._
object TestDataType {
def main(args: Array[String]): Unit = {
val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
//基礎(chǔ)數(shù)據(jù)類型: Int, Double, Long, String
val dataStream1: DataStream[Long] = env.fromElements(1L, 2L, 3L, 4L)
//Java/scala數(shù)組(tuples)
val dataStream2: DataStream[(String, Int)] = env.fromElements(("Adam",17), ("Sarah", 23))
//Scala樣例類
case class Pepole(name: String, age: Int)
val dataStream3: DataStream[Product with Serializable] = env.fromElements(Pepole("Linda", 17),("sala", 23))
//Arrays, Lists, Maps, Enums, 等等
//Java對(duì)象
val dataStream5: DataStream[Person] = env.fromElements(new Person())
}
}
java對(duì)象類:
package com.atguigu.apiTest;
public class Person {
public String name;
public int age;
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}