国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spark(9):RDD的序列化

這篇具有很好參考價(jià)值的文章主要介紹了Spark(9):RDD的序列化。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

0. 相關(guān)文章鏈接

1.?閉包檢查

2. 序列化方法和屬性

3. Kryo 序列化框架?

4. 核心點(diǎn)總結(jié)


0. 相關(guān)文章鏈接

?Spark文章匯總?

1.?閉包檢查

????????從計(jì)算的角度, 算子以外的代碼都是在 Driver 端執(zhí)行, 算子里面的代碼都是在 Executor 端執(zhí)行。那么在 scala 的函數(shù)式編程中,就會(huì)導(dǎo)致算子內(nèi)經(jīng)常會(huì)用到算子外的數(shù)據(jù),這樣就形成了閉包的效果,如果使用的算子外的數(shù)據(jù)無(wú)法序列化,就意味著無(wú)法傳值給 Executor 端執(zhí)行,就會(huì)發(fā)生錯(cuò)誤,所以需要在執(zhí)行任務(wù)計(jì)算前,檢測(cè)閉包內(nèi)的對(duì)象是否可以進(jìn)行序列化,這個(gè)操作我們稱(chēng)之為閉包檢測(cè)。Scala2.12 版本后閉包編譯方式發(fā)生了改變。

2. 序列化方法和屬性

從計(jì)算的角度, 算子以外的代碼都是在 Driver 端執(zhí)行, 算子里面的代碼都是在 Executor端執(zhí)行:

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD

/**
 * @ date: 2023/7/4
 * @ author: yangshibiao
 * @ desc: 項(xiàng)目描述
 */
object ModelTest {

    def main(args: Array[String]): Unit = {

        //1.創(chuàng)建SparkConf并設(shè)置App名稱(chēng)
        val conf: SparkConf = new SparkConf().setAppName("ModelTest").setMaster("local[*]")

        //2.創(chuàng)建SparkContext,該對(duì)象是提交Spark App的入口
        val sc: SparkContext = new SparkContext(conf)

        //3.創(chuàng)建一個(gè)RDD
        val rdd: RDD[String] = sc.makeRDD(Array("hello world", "hello spark", "hive", "12345"))

        //3.1創(chuàng)建一個(gè)Search對(duì)象
        val search: Search = new Search("hello")

        //3.2 函數(shù)傳遞,打?。篍RROR Task not serializable
        search.getMatch1(rdd).collect().foreach(println)

        //3.3 屬性傳遞,運(yùn)行正常
        // search.getMatch2(rdd).collect().foreach(println)

        //4.關(guān)閉連接
        sc.stop()

    }
}


class Search(query: String) {

    def isMatch(s: String): Boolean = {
        s.contains(query)
    }

    // 函數(shù)序列化案例
    def getMatch1(rdd: RDD[String]): RDD[String] = {
        rdd.filter(isMatch)
    }

    // 屬性序列化案例
    def getMatch2(rdd: RDD[String]): RDD[String] = {
        val q: String = query
        rdd.filter((x: String) => x.contains(q))
    }

}

運(yùn)行第一個(gè)方法進(jìn)行函數(shù)傳遞時(shí),拋出?ERROR Task not serializable,如下圖所示:

Spark(9):RDD的序列化,# Spark,spark,大數(shù)據(jù),bigdata

運(yùn)行第二個(gè)方法進(jìn)行屬性傳遞時(shí),運(yùn)行正常,打印出正常結(jié)果,如下圖所示:

Spark(9):RDD的序列化,# Spark,spark,大數(shù)據(jù),bigdata

3. Kryo 序列化框架?

參考地址: https://github.com/EsotericSoftware/kryo?

????????Java 的序列化能夠序列化任何的類(lèi)。但是比較重(字節(jié)多),序列化后,對(duì)象的提交也比較大。Spark 出于性能的考慮,Spark2.0 開(kāi)始支持另外一種 Kryo 序列化機(jī)制。Kryo 速度是 Serializable 的 10 倍。當(dāng) RDD 在 Shuffle 數(shù)據(jù)的時(shí)候,簡(jiǎn)單數(shù)據(jù)類(lèi)型、數(shù)組和字符串類(lèi)型已經(jīng)在 Spark 內(nèi)部使用 Kryo 來(lái)序列化。

注意:即使使用 Kryo 序列化,也要繼承 Serializable 接口。?


import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD

/**
 * @ date: 2023/7/4
 * @ author: yangshibiao
 * @ desc: 項(xiàng)目描述
 */
object ModelTest {

    def main(args: Array[String]): Unit = {

        //1.創(chuàng)建SparkConf并設(shè)置App名稱(chēng)
        val conf: SparkConf = new SparkConf()
            .setAppName("ModelTest")
            .setMaster("local[*]")
            // 替換默認(rèn)的序列化機(jī)制
            .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
            // 注冊(cè)需要使用 kryo 序列化的自定義類(lèi)
            .registerKryoClasses(Array(classOf[Search]))

        //2.創(chuàng)建SparkContext,該對(duì)象是提交Spark App的入口
        val sc: SparkContext = new SparkContext(conf)

        //3.創(chuàng)建一個(gè)RDD
        val rdd: RDD[String] = sc.makeRDD(Array("hello world", "hello spark", "hive", "12345"))

        //3.1創(chuàng)建一個(gè)Search對(duì)象
        val search: Search = new Search("hello")

        //3.2 函數(shù)傳遞
        search.getMatch1(rdd).collect().foreach(println)

        //4.關(guān)閉連接
        sc.stop()

    }
}


class Search(query: String) extends Serializable {

    def isMatch(s: String): Boolean = {
        s.contains(query)
    }

    // 函數(shù)序列化案例
    def getMatch1(rdd: RDD[String]): RDD[String] = {
        rdd.filter(isMatch)
    }

}

運(yùn)行成功,如下圖所示:

Spark(9):RDD的序列化,# Spark,spark,大數(shù)據(jù),bigdata

4. 核心點(diǎn)總結(jié)

  • 在Spark中,如果有類(lèi)進(jìn)行序列化,該類(lèi)需要繼承Serializable,如下圖所示:

Spark(9):RDD的序列化,# Spark,spark,大數(shù)據(jù),bigdata

  • 在Spark中,Serializable比較重,所以可以使用更優(yōu)的Kryo框架,但是注意的是即使使用 Kryo 序列化,也要繼承 Serializable 接口(如果Spark包中的類(lèi)均已注冊(cè),但如果是自定義的類(lèi),還需要手動(dòng)注冊(cè)),如下圖示所示:

Spark(9):RDD的序列化,# Spark,spark,大數(shù)據(jù),bigdata


注:其他Spark相關(guān)系列文章鏈接由此進(jìn) ->??Spark文章匯總?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-521226.html


到了這里,關(guān)于Spark(9):RDD的序列化的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【高危】Apache Airflow Spark Provider 反序列化漏洞 (CVE-2023-40195)

    【高?!緼pache Airflow Spark Provider 反序列化漏洞 (CVE-2023-40195)

    zhi.oscs1024.com????? 漏洞類(lèi)型 反序列化 發(fā)現(xiàn)時(shí)間 2023-08-29 漏洞等級(jí) 高危 MPS編號(hào) MPS-qkdx-17bc CVE編號(hào) CVE-2023-40195 漏洞影響廣度 廣 OSCS 描述 Apache Airflow Spark Provider是Apache Airflow項(xiàng)目的一個(gè)插件,用于在Airflow中管理和調(diào)度Apache Spark作業(yè)。 受影響版本中,由于沒(méi)有對(duì)conn_prefix參

    2024年02月10日
    瀏覽(29)
  • 網(wǎng)絡(luò)數(shù)據(jù)通信—ProtoBuf實(shí)現(xiàn)序列化和反序列化

    目錄 前言 1.環(huán)境搭建 2. centos下編寫(xiě)的注意事項(xiàng) 3.約定雙端交互接口 4.約定雙端交互req/resp 5. 客戶端代碼實(shí)現(xiàn) 6.服務(wù)端代碼實(shí)現(xiàn) Protobuf還常用于通訊協(xié)議、服務(wù)端數(shù)據(jù)交換場(chǎng)景。那么在這個(gè)示例中,我們將實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)版本的通訊錄,模擬實(shí)現(xiàn)客戶端與服務(wù)端的交互,通過(guò)P

    2024年02月04日
    瀏覽(18)
  • c++ 使用rapidjson對(duì)數(shù)據(jù)序列化和反序列化(vs2109)

    c++ 使用rapidjson對(duì)數(shù)據(jù)序列化和反序列化(vs2109)

    ??RapidJSON是騰訊開(kāi)源的一個(gè)高效的C++ JSON解析器及生成器,它是只有頭文件的C++庫(kù),綜合性能是最好的。 1. 安裝 在NuGet中為項(xiàng)目安裝tencent.rapidjson 2. 引用頭文件 #include rapidjson/document.h #include rapidjson/memorystream.h #include rapidjson/prettywriter.h 3. 頭文件定義 添加測(cè)試json字符串和類(lèi)型

    2024年02月07日
    瀏覽(21)
  • Spark大數(shù)據(jù)處理講課筆記---Spark RDD典型案例

    Spark大數(shù)據(jù)處理講課筆記---Spark RDD典型案例

    利用RDD計(jì)算總分與平均分 利用RDD統(tǒng)計(jì)每日新增用戶 利用RDD實(shí)現(xiàn)分組排行榜 針對(duì)成績(jī)表,計(jì)算每個(gè)學(xué)生總分和平均分 ? 讀取成績(jī)文件,生成lines;定義二元組成績(jī)列表;遍歷lines,填充二元組成績(jī)列表;基于二元組成績(jī)列表創(chuàng)建RDD;對(duì)rdd按鍵歸約得到rdd1,計(jì)算總分;將rdd1映射

    2024年02月06日
    瀏覽(31)
  • Flink 數(shù)據(jù)序列化

    Flink 數(shù)據(jù)序列化

    大家都知道現(xiàn)在大數(shù)據(jù)生態(tài)非?;?,大多數(shù)技術(shù)組件都是運(yùn)行在 JVM 上的, Flink 也是運(yùn)行在 JVM 上,基于 JVM 的數(shù)據(jù)分析引擎都需要將大量的數(shù)據(jù)存儲(chǔ)在內(nèi)存中,這就不得不面臨 JVM 的一些問(wèn)題,比如 Java 對(duì)象存儲(chǔ)密度較低等。針對(duì)這些問(wèn)題,最常用的方法就是實(shí)現(xiàn)一個(gè)顯式的

    2024年02月04日
    瀏覽(24)
  • Spark【Spark SQL(二)RDD轉(zhuǎn)換DataFrame、Spark SQL讀寫(xiě)數(shù)據(jù)庫(kù) 】

    Spark【Spark SQL(二)RDD轉(zhuǎn)換DataFrame、Spark SQL讀寫(xiě)數(shù)據(jù)庫(kù) 】

    Saprk 提供了兩種方法來(lái)實(shí)現(xiàn)從 RDD 轉(zhuǎn)換得到 DataFrame: 利用反射機(jī)制推斷 RDD 模式 使用編程方式定義 RDD 模式 下面使用到的數(shù)據(jù) people.txt : ????????在利用反射機(jī)制推斷 RDD 模式的過(guò)程時(shí),需要先定義一個(gè) case 類(lèi),因?yàn)橹挥?case 類(lèi)才能被 Spark 隱式地轉(zhuǎn)換為DataFrame對(duì)象。 注意

    2024年02月09日
    瀏覽(26)
  • Spark RDD編程 文件數(shù)據(jù)讀寫(xiě)

    從本地文件系統(tǒng)讀取數(shù)據(jù),可以采用textFile()方法,可以為textFile()方法提供一個(gè)本地文件或目錄地址,如果是一個(gè)文件地址,它會(huì)加載該文件,如果是一個(gè)目錄地址,它會(huì)加載該目錄下的所有文件的數(shù)據(jù)。 示例:讀取一個(gè)本地文件word.txt val textFile中的textFile是變量名稱(chēng),sc.t

    2024年02月05日
    瀏覽(25)
  • 大數(shù)據(jù) - Spark系列《六》- RDD詳解

    大數(shù)據(jù) - Spark系列《六》- RDD詳解

    Spark系列文章: 大數(shù)據(jù) - Spark系列《一》- 從Hadoop到Spark:大數(shù)據(jù)計(jì)算引擎的演進(jìn)-CSDN博客 大數(shù)據(jù) - Spark系列《二》- 關(guān)于Spark在Idea中的一些常用配置-CSDN博客 大數(shù)據(jù) - Spark系列《三》- 加載各種數(shù)據(jù)源創(chuàng)建RDD-CSDN博客 大數(shù)據(jù) - Spark系列《四》- Spark分布式運(yùn)行原理-CSDN博客 大數(shù)據(jù)

    2024年02月20日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹(shù)篇|超清晰圖解和詳解:二叉樹(shù)的序列化和反序列化

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹(shù)篇|超清晰圖解和詳解:二叉樹(shù)的序列化和反序列化

    博主簡(jiǎn)介: 努力學(xué)習(xí)的22級(jí)計(jì)算機(jī)科學(xué)與技術(shù)本科生一枚?? 博主主頁(yè): @是瑤瑤子啦 每日一言??: 你不能要求一片海洋,沒(méi)有風(fēng)暴,那不是海洋,是泥塘——畢淑敏 ?? 序列化 :本質(zhì)就是 二叉樹(shù)的遍歷 ,就那么幾個(gè):前序、中序、后序、層序。而序列化只不過(guò)就是 在遍歷到

    2024年02月10日
    瀏覽(20)
  • 安卓數(shù)據(jù)存儲(chǔ)補(bǔ)充:XML序列化

    序列化是將對(duì)象狀態(tài)轉(zhuǎn)換為可保存或傳輸?shù)母袷降倪^(guò)程。我們可以把對(duì)象序列化為不同的格式,比如說(shuō):JSon序列化、XML序列化、二進(jìn)制序列化等等,不同的形式適應(yīng)不同的業(yè)務(wù)需求。 把對(duì)象的成員變量轉(zhuǎn)化為XML格式,需要使用Xml序列化器(XmlSerializer類(lèi)),序列化之后的對(duì)象

    2024年02月10日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包