【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用015-Flink中廣播變數和分散式快取001
1.flink中的廣播變數
flink支援將變數廣播到worker上,以供程式運算使用。
執行程式
package code.book.batch.sinksource.scala
import java.util
import org.apache.flink.api.common.functions.RichMapFunction
import org.apache.flink.api.scala.{DataSet, ExecutionEnvironment, _}
import org.apache.flink.configuration.Configuration
object BroadcastVariables001 {
def main(args: Array[String]): Unit = {
val env = ExecutionEnvironment.getExecutionEnvironment
//1.準備工人資料(用於map)
case class Worker(name: String, salaryPerMonth: Double)
val workers: DataSet[Worker] = env.fromElements(
Worker("zhagnsan", 1356.67),
Worker("lisi", 1476.67)
)
//2準備統計資料(用於廣播,通過withBroadcastSet進行廣播)
case class Count(name: String, month: Int)
val counts: DataSet[Count] = env.fromElements(
Count("zhagnsan", 4),
Count("lisi", 5)
)
//3.使用map資料和廣播資料進行計算
workers.map(new RichMapFunction[Worker, Worker] {
private var cwork: util.List[Count] = null
override def open(parameters: Configuration): Unit = {
super.open(parameters)
// 3.1 訪問廣播資料
cwork = getRuntimeContext.getBroadcastVariable[Count]("countWorkInfo")
}
override def map(w: Worker): Worker = {
//3.2解析廣播資料
var i = 0
while (i < cwork.size()) {
val c = cwork.get(i)
i += 1
if (c.name.equalsIgnoreCase(w.name)) {
//有相應的資訊的返回值
return Worker(w.name, w.salaryPerMonth * c.month)
}
}
//無相應的資訊的返回值
Worker("###", 0)
}
}).withBroadcastSet(counts, "countWorkInfo").print()
}
}
執行效果
Worker(zhagnsan,5426.68)
Worker(lisi,7383.35)
相關文章
- 【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用016-Flink中廣播變數和分散式快取002Apache變數分散式快取
- 【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用017-Flink中引數傳遞和容錯設定001Apache
- 【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用013-Flink在批處理中常見的sink和source001Apache
- 【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用018-Flink中引數傳遞和容錯設定002Apache
- 【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用019-Flink中引數傳遞和容錯設定003Apache
- 【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用020-Flink中引數傳遞和容錯設定004Apache
- 【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用011-Slot和Parallelism的深入分析006ApacheParallel
- 【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用012-Slot和Parallelism的深入分析007ApacheParallel
- 【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用014-Flink在批處理中常見的sink和source002Apache
- Apache Flink 進階(三):Checkpoint 原理解析與應用實踐Apache
- Apache Flink 進階(五):資料型別和序列化Apache資料型別
- Apache Flink 在鬥魚的應用與實踐Apache
- Apache Flink 在汽車之家的應用與實踐Apache
- 分散式計算技術(下):Impala、Apache Flink、星環Slipstream分散式Apache
- 深入 Python 資料分析:高階技術與實戰應用Python
- MySQL高階特性——繫結變數MySql變數
- Apache Flink 進階入門(二):Time 深度解析Apache
- Apache Flink 在翼支付的實踐應用Apache
- 使用Apache Flink和Apache Ignit進行資料流分析Apache
- Apache Flink 在蔚來汽車的應用Apache
- Flink CDC 系列 - 實現 MySQL 資料實時寫入 Apache DorisMySqlApache
- Apache Flink 進階(一):Runtime 核心機制剖析Apache
- 「Mybatis系列」Mybatis高階應用MyBatis
- Django高階之-快取Django快取
- Apache Flink 特性 - State TTL (Time-to-Live)Apache
- Flink(1.11)高階程式設計——FlinkSQL程式設計SQL
- python中list列表的高階應用 高階函式Python函式
- 學習Spring 高階特性----Web應用與MVCSpringWebMVC
- [譯] RxJS 高階快取JS快取
- apache flink 簡介Apache
- iOS檔案的高階快取– DDGDataCache_OC 快取庫的高階用法iOS快取
- iOS檔案的高階快取-- DDGDataCache_OC 快取庫的高階用法iOS快取
- Excel高階應用教程:資料處理與資料分析Excel
- javascript高階函式的應用JavaScript函式
- 高階函式應用--currying函式
- 基於 Apache ShardingSphere 構建高可用分散式資料庫Apache分散式資料庫
- JS 利用高階函式實現函式快取(備忘模式)JS函式快取模式
- MySQL系列-- 5. MySQL高階特性MySql