【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用016-Flink中廣播變數和分散式快取002
2.flink中的分散式快取
flink支援將檔案,分散式快取到worker節點,以便程式計算使用。
執行程式
package code.book.batch.sinksource.scala
import org.apache.flink.api.common.functions.RichMapFunction
import org.apache.flink.api.scala.{DataSet, ExecutionEnvironment, _}
import org.apache.flink.configuration.Configuration
import scala.collection.mutable.ListBuffer
import scala.io.Source
/**
* hdfs:///input/flink/workcount.txt檔案內容如下:
* zhagnsan:4
* lisi:5
*/
object DistributedCache001 {
def main(args: Array[String]): Unit = {
val env = ExecutionEnvironment.getExecutionEnvironment
//1.準備快取資料,
val path = "hdfs:///input/flink/workcount.txt"
env.registerCachedFile(path, "MyTestFile")
//2.準備工人資料
case class Worker(name: String, salaryPerMonth: Double)
val workers: DataSet[Worker] = env.fromElements(
Worker("zhagnsan", 1356.67),
Worker("lisi", 1476.67)
)
//3.使用快取資料和工人資料做計算
workers.map(new MyMapper()).print()
class MyMapper() extends RichMapFunction[Worker, Worker] {
private var lines: ListBuffer[String] = new ListBuffer[String]
//3.1在open方法中獲取快取檔案
override def open(parameters: Configuration): Unit = {
super.open(parameters)
//access cached file via RuntimeContext and DistributedCache
val myFile = getRuntimeContext.getDistributedCache.getFile("MyTestFile")
val lines = Source.fromFile(myFile.getAbsolutePath).getLines()
lines.foreach(f = line => {
this.lines.append(line)
})
}
//3.2在map方法中使用獲取到的快取檔案內容
override def map(worker: Worker): Worker = {
var name = ""
var month = 0
//分解檔案中的內容
for (s <- this.lines) {
val tokens = s.split(":")
if (tokens.length == 2) {
name = tokens(0).trim
if (name.equalsIgnoreCase(worker.name)) {
month = tokens(1).trim.toInt
}
}
//找到滿足條件的資訊
if (name.nonEmpty && month > 0.0) {
return Worker(worker.name, worker.salaryPerMonth * month)
}
}
//沒有滿足條件的資訊
Worker(worker.name, worker.salaryPerMonth * month)
}
}
}
}
執行效果
Worker(zhagnsan,5426.68)
Worker(lisi,7383.35)
相關文章
- 【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用015-Flink中廣播變數和分散式快取001Apache變數分散式快取
- 【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用018-Flink中引數傳遞和容錯設定002Apache
- 【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用014-Flink在批處理中常見的sink和source002Apache
- 【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用019-Flink中引數傳遞和容錯設定003Apache
- 【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用020-Flink中引數傳遞和容錯設定004Apache
- 【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用017-Flink中引數傳遞和容錯設定001Apache
- 【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用011-Slot和Parallelism的深入分析006ApacheParallel
- 【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用012-Slot和Parallelism的深入分析007ApacheParallel
- 【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用013-Flink在批處理中常見的sink和source001Apache
- 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