最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

flink?RichFunction之坑及解決

 更新時間:2022年12月17日 08:51:57   投稿:jingxian  
這篇文章主要介紹了flink?RichFunction之坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

flink RichFunction之坑

flink的RichMapFunction,RichSinkFunction等,并不能百分百做到每次只open一個數(shù)據(jù)庫連接。

在有些情況下他會一直創(chuàng)建然后銷毀,創(chuàng)建銷毀。

舉例: 重點在第三行的注釋

  val value = env.socketTextStream("192.168.13.11", 9090)
    val value2 = value.filter(x => {
      try {
        var a = 1 / 0   //此處若沒有異常處理,任務(wù)不會斷,但是會重復(fù)打開數(shù)據(jù)庫連接
      } catch {
        case e: Exception =>
      }
      isInter(x)
    }).map(fun = x => {
      x.toLong
    })
    val value1 = value2.assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor[Long](Time.seconds(1)) {
      override def extractTimestamp(element: Long): Long = {
        println(element + "***************")
        element
      }
    })

    try {
      var a = 1 / 0
    } catch {
      case e: Exception =>
    }
    value1.map(new mymap)
    env.execute("test")

  }

  def isInter(input: String): Boolean = {
    val matcher = Pattern.compile("^[0-9]+$").matcher(input)
    matcher.find()
  }
}


class myRichMapfun6() extends RichMapFunction[ListBuffer[String], Unit] {
  var conn: Connection = _
  var pst: PreparedStatement = _

  override def open(parameters: Configuration): Unit = {
    conn = DriverManager.getConnection("jdbc:mysql://xxxxxxx:3306/zzt?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&autoReconnect=true", "root", "bigdata@mysql")
    println(conn)
    pst = conn.prepareStatement("insert into testa (str) values (?)")
  }

  override def close(): Unit = {
    conn.close()
    pst.close()
  }

  override def map(in: ListBuffer[String]): Unit = {
    pst.setString(1, in.head)
    pst.execute()
  }
}

所以你是不是覺得那就價格異常處理不就得了?

NO

再看:

在這里插入圖片描述

這個時候,如果傳進(jìn)來line不是數(shù)字或者格式不對,就會觸發(fā)異常,然而此時就不會像上面那樣幫你解決問題,而是一遍遍創(chuàng)建對象銷毀對象,一條消息創(chuàng)建一個連接,我就問你慌不慌,

原因

據(jù)觀察是因為,輸入的數(shù)據(jù)有問題,直接導(dǎo)致

 val value1 = value2.assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor[Long](Time.seconds(1)) {
      override def extractTimestamp(element: Long): Long = {
        println(element + "***************")
        element
      }
    })

這個崩潰了,不走這行代碼了,沒有獲得eventime,然后估計。。。 剩下的我也沒詳細(xì)測。。。

解決方案

先fiiter過濾任何可能導(dǎo)致異常的臟數(shù)據(jù)確保數(shù)據(jù)都沒問題就可以了。 

flink中RichFunction的一點小作用

①傳遞參數(shù)

所有需要用戶定義的函數(shù)都可以轉(zhuǎn)換成richfunction,例如實現(xiàn)map operator中你需要實現(xiàn)一個內(nèi)部類,并實現(xiàn)它的map方法:

data.map (new MapFunction<String, Integer>() {
  public Integer map(String value) { return Integer.parseInt(value); }
});

然后我們可以將其轉(zhuǎn)換為RichMapFunction:

data.map (new RichMapFunction<String, Integer>() {
  public Integer map(String value) { return Integer.parseInt(value); }
});

當(dāng)然,RichFuction除了提供原來MapFuction的方法之外,還提供open, close, getRuntimeContext 和setRuntimeContext方法,這些功能可用于參數(shù)化函數(shù)(傳遞參數(shù)),創(chuàng)建和完成本地狀態(tài),訪問廣播變量以及訪問運行時信息以及有關(guān)迭代中的信息。

下面我們來看看RichFuction中傳遞參數(shù)的例子,以下代碼是測試RichFilterFuction的例子,基于DataSet而非DataStream。

由代碼可見,可以將Configuration中的limit參數(shù)的值傳遞進(jìn)RichFuction里面,通過后面withParameters方法傳遞進(jìn)去,最后的結(jié)果是

由此可見,我從configuration中獲取了limit的值,并設(shè)定了fliter的閾值是2,從而過濾了1,2。

②傳遞廣播變量

原理和上面差不多,下面我直接把代碼貼出來:

這是目前我學(xué)習(xí)到的RichFunction的用法,和大家分享一下。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot使用@Scheduled實現(xiàn)定時任務(wù)的并行執(zhí)行

    SpringBoot使用@Scheduled實現(xiàn)定時任務(wù)的并行執(zhí)行

    在SpringBoot中,如果使用@Scheduled注解來定義多個定時任務(wù),默認(rèn)情況下這些任務(wù)將會被安排在一個單線程的調(diào)度器中執(zhí)行,這意味著,這些任務(wù)將會串行執(zhí)行,而不是并行執(zhí)行,本文介紹了SpringBoot使用@Scheduled實現(xiàn)定時任務(wù)的并行執(zhí)行,需要的朋友可以參考下
    2024-06-06
  • JDBC基礎(chǔ)教程

    JDBC基礎(chǔ)教程

    這篇文章主要介紹了JDBC基礎(chǔ)知識與操作技巧,講述原理與基本技巧的基礎(chǔ)上分析了安全問題與操作注意事項,非常具有實用價值,需要的朋友可以參考下
    2014-12-12
  • Java徹底消滅if-else的8種方案

    Java徹底消滅if-else的8種方案

    這篇文章主要給大家介紹了關(guān)于Java徹底消滅if-else的8種方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java Map 通過 key 或者 value 過濾的實例代碼

    Java Map 通過 key 或者 value 過濾的實例代碼

    這篇文章主要介紹了Java Map 通過 key 或者 value 過濾的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • Eclipse轉(zhuǎn)Itellij IDEA導(dǎo)入Git/svn本地項目的詳細(xì)步驟

    Eclipse轉(zhuǎn)Itellij IDEA導(dǎo)入Git/svn本地項目的詳細(xì)步驟

    這篇文章主要介紹了Eclipse轉(zhuǎn)Itellij IDEA導(dǎo)入Git/svn本地項目,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Springboot 項目讀取Resources目錄下的文件(推薦)

    Springboot 項目讀取Resources目錄下的文件(推薦)

    這篇文章主要介紹了Springboot 項目讀取Resources目錄下的文件,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • JavaGUI使用標(biāo)簽與按鈕方法詳解

    JavaGUI使用標(biāo)簽與按鈕方法詳解

    這篇文章主要介紹了JavaGUI使用標(biāo)簽與按鈕方法,前段時間學(xué)了GUI,總體上概念還是有點模糊,于是決定花點時間簡單整理下。先簡單介紹一下GUI,GUI就是圖形用戶界面
    2023-03-03
  • 詳解java中float與double的區(qū)別

    詳解java中float與double的區(qū)別

    這篇文章主要介紹了JAVA中float與double的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java基礎(chǔ)之關(guān)鍵字final詳解

    Java基礎(chǔ)之關(guān)鍵字final詳解

    這篇文章主要介紹了Java基礎(chǔ)之關(guān)鍵字final詳解,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • JavaWeb基礎(chǔ)教程之Java基礎(chǔ)加強(qiáng)版

    JavaWeb基礎(chǔ)教程之Java基礎(chǔ)加強(qiáng)版

    這篇文章主要介紹了JavaWeb基礎(chǔ)教程之Java基礎(chǔ)加強(qiáng)版的相關(guān)資料,需要的朋友可以參考下
    2016-07-07

最新評論

绥中县| 金堂县| 云南省| 江华| 武乡县| 内丘县| 常州市| 调兵山市| 长海县| 房产| 盐边县| 石城县| 石嘴山市| 乌什县| 治县。| 丹阳市| 琼海市| 武清区| 徐闻县| 西城区| 灵丘县| 苏尼特左旗| 沙雅县| 阜平县| 重庆市| 织金县| 得荣县| 湖北省| 平阴县| 淄博市| 金华市| 通河县| 莫力| 和田县| 九寨沟县| 禄丰县| 天水市| 札达县| 乌兰察布市| 濉溪县| 昌宁县|