国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

在Apache Spark中執行聚合的五種方法

大數據 Spark
聚合是數據分析任務中廣泛使用的運算符,Spark為此提供了堅實的框架。 以下是使用Spark可以針對大數據進行聚合的五種不同方式。

在Apache Spark中執行聚合的五種方法

聚合是數據分析任務中廣泛使用的運算符,Spark為此提供了堅實的框架。 以下是使用Spark可以針對大數據進行聚合的五種不同方式。

RDD上的GroupByKey或ReduceByKey轉換:RDD是Spark中分布式數據收集的最早表示,其中數據通過" T"類型的任意Java對象表示。 RDD上的聚合與map-reduce框架中的reduce概念相似,在reduce中,reduce函數(作用于兩個輸入記錄以生成聚合記錄)是聚合的關鍵。 使用RDD時,聚合可以通過GroupByKey或ReduceByKey轉換來執行,但是,這些轉換僅限于Pair RDD(元組對象的集合,每個元組都由類型為" K"的鍵對象和類型為" V"的值對象組成) 。

在通過GroupByKey進行聚合的情況下,轉換會導致元組對象具有鍵對象和針對該鍵對象的所有值對象的集合。 因此,之后需要應用一個映射器(通過map,maptoPair或mapPartitions進行映射轉換),以便將每個Tuple對象的值對象的集合減少為一個聚合的值對象。

 

在Apache Spark中執行聚合的五種方法
> Aggregation on a Pair RDD (with 2 partitions) via GroupByKey followed via either of map, maptopair

映射程序(例如map,maptoPair和mappartitions轉換)包含聚合函數,以將類型為" V"的值對象的集合減少為類型為" U"的聚合對象。 聚合函數可以是任意函數,不需要遵循關聯性或交換性狀。 GroupByKey轉換具有三種風格,它們因應用GroupByKey轉換而在RDD的分區規范上有所不同。 GroupByKey可以總結為:

  1. GroupByKey (PairRDD) => PairRDD> Map (PairRDD>) => PairRDD 

如果通過ReduceByKey進行聚合,則轉換將直接導致具有鍵對象和針對該鍵對象的聚合對象的元組對象。 與GroupByKey一樣,在ReduceByKey之后不需要映射器。 ReduceByKey轉換采用關聯和可交換的聚合函數,以便在跨分區聚合記錄之前,可以在本地聚合位于同一分區的記錄。 同樣,聚合函數接受兩個說類型為" V"的值對象,并返回一個類型為" V"的對象。 與GroupByKey相似,ReduceByKey轉換也具有三種風格,它們的區別在于通過應用ReduceByKey轉換而導致的RDD分區規范。 ReduceByKey可以總結為:

  1. ReduceByKey(PairRDD, Function) => PairRDD 

在GroupByKey和ReduceByKey中,前者更通用,可以與任何聚合函數一起使用,而后者則更有效,但僅適用于前面所述的一類聚合函數。

RDD或數據集上的Mappartitions:如先前博客中所述,Mappartitions是功能強大的窄轉換之一,可在RDD和Dataset(Spark中的數據表示)上使用,以明智地執行各種操作。 這樣的操作之一也包括聚合。 但是,唯一需要滿足的條件是,屬于相同分組關鍵字的記錄應位于單個分區中。 在涉及分組密鑰的混排操作中實現的RDD或數據集(要聚合)中可以隱式滿足此條件。 同樣,可以通過首先基于分組密鑰對RDD或數據集進行重新分區來明確實現該條件。

在用于典型聚合流的mappartitions內,必須首先實例化一個Hashmap,將Hashmap與相應的分組鍵相對應地存儲聚合的Value Objects。 然后,在迭代基礎分區的數據收集時,將重復更新此Hashmap。 最后,返回包含在映射中的聚合值/對象(可選以及關聯的分組鍵)的迭代器。

由于基于Mappartitions的聚合涉及將Hashmap保留在內存中以保存鍵和聚合的Value對象,因此,如果大量唯一分組鍵駐留在基礎分區中,則Hashmap將需要大量堆內存,因此可能導致 相應執行程序的內存不足終止的風險。 從此以后,不應該歪曲跨分區的分組密鑰分配,否則會由于過度提供執行程序內存來處理偏斜而導致執行程序內存浪費。 此外,由于需要基于堆內存的聚合哈希圖,因此與Spark中的專用聚合運算符相比,對內存的相對內存分配更多,但是如果內存不是約束,則基于Mappartitions的聚合可以提供良好的性能提升。

用于數據幀或數據集的UDAF:與上述方法不同,UDAF基于聚合緩沖區的概念以及在此緩沖區上運行的一組方法來實現聚合。

 

在Apache Spark中執行聚合的五種方法
> Aggregation buffer based aggregation flow in Spark (for Datasets and Dataframe)

到目前為止,UDAF是為Spark中的分布式數據收集的Dataframe或Dataset表示編寫聚合邏輯的最常用方法。 UDAF在數據收集的無類型視圖上工作,在該視圖中,數據記錄被視為(表的)一行,其架構定義了該行中每一列的類型和可空性。 通過擴展包" org.apache.spark.sql.expressions"中存在的" UserDefinedAggregationFunction"類并覆蓋基類中以下方法的實現,可以在Spark中創建UDAF:

  1. /*Return schema for input column(s) to the UDAF, schema being built using StructType*/ 
  2. => public StructType inputSchema() 
  3. /*Return schema of aggregation buffer, schema being built using StructType */ 
  4. => public StructType bufferSchema() 
  5. /*DataType of final aggregation result*/ 
  6. => public DataType dataType() 
  7. /*Initialize aggregation buffer*/ 
  8. => public void initialize(MutableAggregationBuffer buffer) 
  9. /*Update aggregation buffer for each of the untyped view (Row) of an input object*/ 
  10. => public void update(MutableAggregationBuffer buffer, Row row) 
  11. /*Update current aggregation buffer with a partially aggregated buffer*/ 
  12. => public void merge(MutableAggregationBuffer buffer, Row buffer) 
  13. /*Evaluate final aggregation buffer and return the evaluated value of DataType declared earlier */ 
  14. => public Object evaluate(Row buffer) 

除了覆蓋上述方法外,還可以始終聲明其他字段(在UDAF構造函數中使用可選的初始化)和自定義UDAF類中的其他方法,以便在覆蓋方法中使用它們以實現聚合目標。

在使用UDAF之前,必須先在Spark框架中注冊相同的實例:

  1. spark.udf.register('sampleUDAF, new SampleUDAF()); 

注冊后,可以在Spark SQL查詢中使用UDAF來聚合整個數據集/數據框或數據集/數據框中的記錄組(通過一列或多列分組)。 除了直接在Spark SQL查詢中使用外,還可以通過數據框/數據集聚合API(例如" agg")使用UDAF。

UDAF雖然是定義自定義聚合的一種流行方法,但是當在聚合緩沖區中使用復雜的數據類型(數組或映射)時,會遇到性能問題。 這是由于以下事實:在UDAF中的每次更新操作期間,對于復雜的數據類型,將scala數據類型(用戶特定)轉換為相應的催化劑數據類型(催化劑內部數據類型)(反之亦然)變得非常昂貴。 從內存和計算的角度來看,此成本都更高。

數據集的聚合器:聚合器是對數據集執行聚合的最新方法,類似于UDAF,它也基于聚合緩沖區的概念以及在該緩沖區上運行的一組方法。 但是,聚合器進行聚合的方式稱為類型化聚合,因為它涉及對各種類型的對象進行操作/使用各種類型的對象進行操作。 聚合器的輸入,聚合緩沖區和最終的聚合輸出(從緩沖區派生)都是具有相應Spark編碼器的某些類型的對象。 用戶可以通過使用為IN定義的類型(輸入記錄類型)擴展抽象的通用'Aggregator '類(在包'org.apache.spark.sql.expressions中提供)來定義自己的自定義Aggregator。 ,為BUF(聚合緩沖區)定義的類型和為OUT(輸出記錄類型)定義的類型,以及在基類中重寫以下方法的實現:

  1. /* return Encoder for aggregation buffer of type BUF. This is required for buffer ser/deser during shuffling or disk spilling */ 
  2. => public Encoder<BUF> bufferEncoder() 
  3. /* return Encoder for output object of type OUT after aggregation is performed */ 
  4. => public Encoder<OUT> outputEncoder() 
  5. /* return updated aggregation buffer object of type BUF after aggregating the existing buffer object of type BUF with the input object of type IN*/ 
  6. => public BUF reduce(BUF buffer, IN input) () 
  7. /* return updated aggregation buffer of type BUF after merging two partially aggregated buffer objects of type BUF */ 
  8. => public BUF merge(BUF buffer1, BUF buffer2) 
  9. /* return output object of type OUT from evaluation of  aggregation buffer of type BUF */ 
  10. => public OUT finish(BUF arg0) 
  11. /* return buffer object of type BUF after initializing the same */ 
  12. => public BUF zero() 

由于Aggregator本機支持將聚合緩沖區作為對象,因此它是高效的,并且不需要與從Scala類型轉換為催化劑類型(反之亦然)相關的不必要的開銷(與UDAF一樣)。 同樣,聚合器的聚合方式在編寫聚合邏輯時提供了更多的靈活性和編程的美感。 聚合器也已集成到無類型聚合流中,以支持SQL,例如即將發布的版本中的查詢。

預定義的聚合功能:Spark提供了各種預構建的聚合功能,可用于分布式數據收集的數據框或數據集表示形式。 這些預先構建的函數可以在SPARK SQL查詢表達式中使用,也可以與為Dataframe或Dataset定義的聚合API一起使用。 在org.apache.spark.sql包中,所有預先構建的聚合函數都定義為"函數"類的靜態方法。 帶下劃線的鏈接可以列出所有這些功能的列表。

預定義的聚合函數經過高度優化,在大多數情況下可以直接與Spark tungusten格式一起使用。 因此,如果" functions"類中存在預先構建的聚合函數,則Spark程序員應始終偏向于使用它們。 萬一那里沒有所需的聚合函數,那么只有一個可以訴諸于編寫自定義聚合函數。

如果您對Spark Aggregation框架有更多查詢,請隨時在評論部分提問。

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2021-11-02 07:54:40

List分片Java

2021-08-27 14:03:05

遠程團隊溝通遠程通信

2022-12-29 08:46:15

IT采購投資

2021-08-27 16:26:11

敏感數據

2025-04-25 08:55:00

Pod運維

2022-12-07 11:24:51

首席信息官IT

2009-07-03 17:48:24

JSP頁面跳轉

2023-11-21 15:23:15

JavaScript工具

2020-12-03 14:40:10

云管理

2020-08-06 13:19:10

IBM多云管理

2011-04-21 10:08:34

2022-01-10 06:52:59

查詢MySQL字段

2022-12-05 10:32:39

IT人才IT團隊

2024-03-18 10:15:00

HTTPNode.jsAPI

2022-05-31 16:00:46

Go 編程語言復制文件Go 標準庫

2019-07-31 08:44:27

Session共享Memcache

2022-11-23 13:46:02

云支出云計算

2020-04-02 10:45:48

多云云計算云平臺

2015-09-10 09:30:54

Java多線程同步

2019-06-04 15:34:05

WindowsLinuxLinux命令
點贊
收藏

51CTO技術棧公眾號

精灵使的剑舞无删减版在线观看| 亚洲性图自拍| 成人xxxx| 黄色网址免费在线观看| 免费在线成人激情电影| 美女av一区| 欧美成人午夜| 国产一区视频导航| 拍真实国产伦偷精品| 免费在线看a| 97青娱国产盛宴精品视频| 影音先锋日韩资源| 久久嫩草精品久久久精品| 精品欧美国产一区二区三区| 欧美精品一区二区在线播放| 久久久国产成人精品| av成人在线电影| www.国产区| 午夜激情在线| 久久爱www成人| 成人国产一区二区三区精品| 欧美偷拍一区二区| 欧洲一区二区视频| 在线综合视频网站| 国产人成在线观看| 成人爽a毛片免费啪啪红桃视频| 亚洲黄色精品| 亚洲一卡二卡三卡四卡五卡| 夜夜嗨av色一区二区不卡| 亚洲一区二区三区四区在线 | 国产色婷婷在线| blacked蜜桃精品一区| 成人av网站在线观看免费| 欧美视频一区二区三区四区| 高清欧美一区二区三区| 黄色一级大片免费| 五月婷婷视频在线观看| 久久亚洲国产| 亚洲色图欧美偷拍| 欧美精品日韩三级| 欧美成人高潮一二区在线看| 爱搞国产精品| 麻豆精品视频在线观看| 欧美日韩国产天堂| 亚洲free嫩bbb| 一色桃子在线| 欧美午夜精彩| 一区二区三区在线免费播放| 99视频一区二区| 国产精品女上位| 午夜精品视频网站| 日韩 欧美 高清| 操欧美女人视频| 欧美激情综合五月色丁香| 欧美多人爱爱视频网站| 免费看日本毛片| 老司机亚洲精品一区二区| 91视视频在线观看入口直接观看www| 日韩不卡中文字幕| 一本一道久久a久久综合精品 | 久久久久国产精品麻豆| 日韩网站免费观看高清| 中文字幕无码精品亚洲35| 国产日韩在线观看视频| 国产精品久久久久久久久久免费看 | 亚洲精品一区二区三区蜜桃久| 中文字幕在线观看播放| 岛国成人毛片| 蜜桃精品噜噜噜成人av| 亚洲精品视频一区二区| 成人黄在线观看| 免费网站免费进入在线| 欧美专区一区二区三区| 亚洲免费视频在线观看| 任你操这里只有精品| 波多野结衣在线播放一区| 欧美日韩精品福利| 99久re热视频精品98| 国产区精品视频在线观看豆花| 亚洲一区二区四区蜜桃| 91免费福利视频| 国产高清不卡| 亚洲欧美日韩电影| 欧美精品一区二区三区在线四季 | 午夜精品国产更新| 亚洲不卡1区| 国产毛片精品| 日韩精品一区二区三区在线观看| 男人亚洲天堂网| 亚洲精品网址| 久久影院在线观看| 成人免费在线电影| 91蜜桃网址入口| 国产高清一区二区三区| 免费观看亚洲视频大全| 欧美中文字幕一区二区三区亚洲| 韩日视频在线观看| 国产精品v亚洲精品v日韩精品| 中文字幕亚洲欧美日韩在线不卡 | 日韩一级片网站| 精品剧情v国产在线观看| 老司机一区二区| 成人国产精品免费视频| 亚洲人体在线| 欧美mv和日韩mv国产网站| 欧美xx网站| aaa国产一区| 欧美日韩精品不卡| 婷婷中文字幕一区| 久久香蕉国产线看观看av| 国产精品一区二区三区视频网站| 久久精品夜夜夜夜久久| 四虎影院一区二区| 免费理论片在线观看播放老| www.性欧美| 国产又大又黄又粗的视频| 久久激情五月激情| 午夜激情久久久| 偷拍中文亚洲欧美动漫| 欧美亚洲国产视频小说| 久久午夜av| 乱小说综合网站| 欧美日韩国产精选| 免费av不卡| 欧美日韩精品专区| 一二三中文字幕在线| 色婷婷香蕉在线一区二区| 亚洲国产日韩a在线播放性色| 免费看男男www网站入口在线| 亚洲欧美日韩在线高清直播| 精品国产乱码久久久久久樱花| 欧美性受xxx| 欧美视频一区| 久久久久久草| 国产精品麻豆视频| 91精品国产66| 99热国产免费| 亚洲欧洲另类国产综合| 色呦呦久久久| 日韩理论片在线观看| 色94色欧美sute亚洲线路二| 成人看片网站| 久久久久久国产精品美女| 日韩精品午夜| 久久综合婷婷综合| 国产精品亚洲一区二区三区妖精| 日韩中文字幕在线不卡| 99国产精品久久久久久久久久久 | 久久夜色精品国产| 欧美理伦片在线播放| 亚洲a∨日韩av高清在线观看| 激情成人综合| 5月婷婷6月丁香| 色婷婷久久综合| 欧美伦理91| 欧美激情精品久久久久久蜜臀| 黑人久久a级毛片免费观看| 99中文字幕| 97久久精品人人做人人爽50路| 成人免费淫片在线费观看| 亚洲国产aⅴ成人精品无吗| 免费的黄网站在线观看| 亚洲欧美综合v| 亚洲精品二区三区| 一区二区三区视频在线播放| 国产精品女同一区二区三区| 九色网友自拍视频手机在线| 少妇精69xxtheporn| 欧美激情视频一区二区三区在线播放| 老牛影视免费一区二区| 国产成人自拍高清视频在线免费播放| hbad中文字幕| 欧美一级欧美三级在线观看| 国产精品chinese在线观看| 91九色极品视频| 成人性生交大合| 日本最黄视频| 亚洲日本成人女熟在线观看| 欧美日韩伦理| 亚洲人一区二区| 国产日韩高清在线| 麻豆视频在线观看免费| 国产精品18久久久久久麻辣| 久久亚洲精品伦理| 国产黄色网页| 亚洲欧美在线看| 99热国内精品| 人人妻人人澡人人爽欧美一区双| 欧美日韩国产123区| 国产精品亚洲欧美一级在线| 国产成人黄色av| 国产91丝袜在线播放九色| 免费人成黄页在线观看忧物| 97久久精品在线| 91丨九色丨蝌蚪丨老版| 国产美女在线观看| 国产精品久久久久久久久男| 中文字幕亚洲一区二区av在线| 51一区二区三区| 成人免费视频网址|