1. 程式人生 > >hive原始碼分析--row_number原始碼分析

hive原始碼分析--row_number原始碼分析

前言

row_nubmer使用說明: row_number接收到的資料是已經分割槽排序的資料, row_number() OVER (PARTITION BYORDERBYd)

description = @Description(
    name = "row_number",
    value = "_FUNC_() - The ROW_NUMBER function assigns a unique number (sequentially, starting "
            + "from 1, as defined by ORDER BY) to each row within the partition."
  ),

程式碼路徑

hive版本:2.1.0

row_number對應的原始碼類:org.apache.hadoop.hive.ql.udf.generic.GenericUDAFRowNumber

這個是一個UDAF,hive的udf在FunctionRegistry,對應的包在ql目錄下

system.registerGenericUDAF("row_number", new GenericUDAFRowNumber());

原始碼分析

1、臨時聚合結果RowNumberBuffer 定義了一個list、計數器,初始化時new一個list、計數器置為1;incr方法 每次將計數器加一併放到list中。
static class RowNumberBuffer implements AggregationBuffer {

    ArrayList<IntWritable> rowNums;
    int nextRow;

    void init() {
      rowNums = new ArrayList<IntWritable>();
    }

    RowNumberBuffer() {
      init();
      nextRow = 1;
    }

    void incr() {
      rowNums.add(new IntWritable(nextRow++));
    }
  }

2、iterate方法

           呼叫RowNumberBuffer.incr(),來一條記錄進行加1

public void iterate(AggregationBuffer agg, Object[] parameters) throws HiveException {
      ((RowNumberBuffer) agg).incr();
    }

3、terminate

          返回最終結果,RowNumberBuffer中的list

public Object terminate(AggregationBuffer agg) throws HiveException {
      return ((RowNumberBuffer) agg).rowNums;
    }



相關推薦

hive原始碼分析--row_number原始碼分析

前言 row_nubmer使用說明: row_number接收到的資料是已經分割槽排序的資料, row_number() OVER (PARTITION BYc ORDERBYd) description = @Description( name = "row_n

原始碼】主成分分析(PCA)與獨立分量分析(ICA)MATLAB工具箱

本MATLAB工具箱包含PCA和ICA實現的多個函式,並且包括多個演示示例。 在主成分分析中,多維資料被投影到最大奇異值相對應的奇異向量上,該操作有效地將輸入訊號分解成在資料中最大方差方向上的正交分量。因此,PCA常用於維數降低的應用中,通過執行PCA產生資料的低維表示,同時,該低維表

PHP實現微信退款的分析原始碼實現

* 1.微信退款到零錢要求必傳證書,需要到https://pay.weixin.qq.com 賬戶中心->賬戶設定->API安全->下載證書,然後修改程式碼中的證書路徑  * 2.該檔案需放到支付授權目錄下,可以在微信支付商戶平臺->產品中心->開發配置中設定。&nb

LeakCanary Android 記憶體洩漏分析利器 原始碼編譯配置mk檔案

LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := \ $(call all-java-files-under, src) LOCAL_SRC_

【go原始碼分析】go原始碼之slice原始碼分析

Go 語言切片是對陣列的抽象。 Go 陣列的長度不可改變,與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。 len() 和 cap() 函式     切片是可索引的,並且可以由 len() 方法獲取長度。    

【go原始碼分析】go原始碼之list原始碼分析

本文針對go 1.11版本,路徑src/container/list/list.go 資料結構 Element結構體 Value 前驅 後繼 // Element is an element of a linked list. type Element st

區塊鏈入門教程以太坊原始碼分析交易資料分析eth

交易的資料結構 交易的資料結構定義在core.types.transaction.go中,結構如下: type Transaction struct { data txdata // caches hash atomic.Value size atomic.Value from atomic.Value

區塊鏈教程eth原始碼分析CMD深入分析(二)

  兄弟連區塊鏈教程eth原始碼分析CMD深入分析(二),cmd包下的geth子包主函式啟動的各個子命令解析 ### cmd包下的geth子包主函式啟動的各個子命令解析 #### /geth * __init__ function:匯入創世塊的json,以指定的json作為創世塊args:<ge

兄弟連區塊鏈教程以太坊原始碼分析CMD深入分析(一)

cmd包分析 cmd下面總共有13個子包,除了util包之外,每個子包都有一個主函式,每個主函式的init方法中都定義了該主函式支援的命令,如 geth包下面的: func init() {     // Initialize the CLI app and st

嵌入式小專案練習-光電設計競賽-尋跡小車-03-尋跡演算法分析原始碼

這裡我用了三個光敏電阻的感測器來進行尋跡:這裡用X1,X2,X3(檢測到了為0)來表示: 演算法思路: 將三個感測器放置如圖:         |          |   

“過時”的SpringMVC我們到底在用什麼?深入分析DispatchServlet原始碼

之前已經分析過了Spring的IOC(《零基礎帶你看Spring原始碼——IOC控制反轉》)與AOP(《從原始碼入手,一文帶你讀懂Spring AOP面向切面程式設計》)的原始碼,本次就來分析下SpringMVC。本文先簡述下目前SpringMVC的使用情況,然後通過Demo的簡單讓大家有一個初步的使用印象,

cocos2d-x實現一個PopStar(消滅星星)遊戲的邏輯分析原始碼

前言 說起PopStar這個遊戲,或許很多人都不知道是啥,但是如果說起消滅星星的話,可能就會有很多人恍然大悟,原來是它。那麼,這個消滅星星長得什麼樣子呢?我們用一張圖來看看: emmm,是的,具體來說,長得就是這樣,我們通過點選圖片上某一個顏色的星星塊,如果,這個顏色塊周圍存在和他相

10分鐘快速精通rollup.js——Vue.js原始碼打包原理深度分析

前言 本教程是rollup.js系列教程的最後一篇,我將基於目前非常流行的Vue.js框架,深度分析Vue.js原始碼打包過程,讓大家深入理解複雜的前端框架是如何利用rollup.js進行打包的。通過這一篇教程的學習,相信大家可以更好地應用rollup.js為自己的專案服務。 說明:本教程基於Vue

Spring原始碼分析:AOP分析(三)

個人扯淡部落格:http://blog.ztgreat.cn 前言 在上篇部落格中,分析了Spring Aop的Advice的實現過程,其中Spring對Advice 使用了介面卡模式,將Advice包裝成了Interceptor,在最後,我們通過Spring提供的

lucene原始碼分析(5)Query分析

查詢的入口 /** Lower-level search API. * * <p>{@link LeafCollector#collect(int)} is called for every matching document. * * @throws

Colly原始碼解析——結合例子分析底層實現

        通過《Colly原始碼解析——主體流程》分析,我們可以知道Colly執行的主要流程。本文將結合http://go-colly.org上的例子分析一些高階設定的底層實現。(轉載請指明出於breaksoftware的csdn部落格) 遞迴深

現代編譯原理——第四章:語義分析以及原始碼

  轉自: http://www.cnblogs.com/BlackWalnut/p/4527845.html   寫完語義分析的程式碼後感覺語義分析只是為了進行型別檢測(後來才發現,這只是語義分析的一部分)。詞法分析注重的是每個單詞是否合法,以及這個單詞屬於語言中的哪些部分。語法分析的上下文無關

深入淺出Mybatis---SQL執行流程分析原始碼篇)

最近太忙了,一直沒時間繼續更新部落格,今天忙裡偷閒繼續我的Mybatis學習之旅。在前九篇中,介紹了mybatis的配置以及使用, 那麼本篇將走進mybatis的原始碼,分析mybatis 的執行流程, 好啦,鄙人不喜歡口水話,還是直接上幹活吧: 1. SqlSessionFactory 與 S

spring MVC執行過程分析原始碼實現

spring mvc 啟動過程可分為如下3步: =============================================                             web.xml                           Dispa

逐行分析AQS原始碼(3)——共享鎖的獲取與釋放

前言 前面兩篇我們以ReentrantLock為例瞭解了AQS獨佔鎖的獲取與釋放,本篇我們來看看共享鎖。由於AQS對於共享鎖與獨佔鎖的實現框架比較類似,因此如果你搞定了前面的獨佔鎖模式,則共享鎖也就很容易弄懂了。 共享鎖與獨佔鎖的區別 共享鎖與獨佔鎖最大的區別在於