1. 程式人生 > >Spark小技巧之pivot

Spark小技巧之pivot

最近在用spark處理資料的時候,遇到了這樣一種需求:
我想統計每個城市在工作日和週末早高峰、晚高峰、夜高峰和普通時間段的訂單數,並且早高峰、晚高峰、夜高峰和普通時間段分別佔一列。

原始檔案CSV檔案的內容如下圖所示:


peak_type代表時間段,其中morning_peak代表早高峰、evening_peak代表晚高峰、nignt_peak代表夜高峰、normal代表正常時間段。
這個問題的實質就是想將某列不同的值轉化為不同的列的問題。
解決這種問題最傳統的方式就是對peak_type不同值分別進行處理,然後進行join操作,但是這種解決辦法相當複雜並且程式碼量大,於是想看看有沒有別的更好的辦法,通過網上搜索,發現了一個叫做pivot的東西。
透視(pivot)資料功能是Spark 1.6的眾多新增特性之一,它通過使用DataFrame(目前支援Scala、Java和Python語言)建立透視表(pivot table)。透視可以視為一個聚合操作,通過該操作可以將一個(實際當中也可能是多個)具有不同值的分組列轉置為各個獨立的列。
看到pivot這個功能,大喜,迫不及待使用,只用一行程式碼就可以搞定:
  csv.groupBy("city_id","date_type").pivot("peak_type").sum("order_num")

簡單高效有木有,最終效果展現如下,滿足了我的需求。


相關推薦

Spark技巧pivot

最近在用spark處理資料的時候,遇到了這樣一種需求:我想統計每個城市在工作日和週末早高峰、晚高峰、夜高峰和普通時間段的訂單數,並且早高峰、晚高峰、夜高峰和普通時間段分別佔一列。原始檔案CSV檔案的內容如下圖所示:peak_type代表時間段,其中morning_peak代表

android技巧點擊兩次退出活動

code over ast finish int ide amp return ini 通常在主活動中可以設置連擊退出程序,下面通過代碼來實現這一功能: @Override//按兩次back鍵退出public boolean onKeyDown(int keyCode, K

Cadence Allegro技巧解決Out of date shapes問題

當你經過幾十個小時的艱苦奮戰,終於把板子布完,而當你興沖沖準備出Gerber檔案丟給板廠打樣,儘早結束噩夢時,卻發現Allegro報錯“Dynamic shapes are out of date; please update them. Check for out of date shapes i

PHP 技巧如何避免參數多次傳遞?

orm 模式 控制 elf 利用 線程數 url參數 函數參數 fun 開發中經常遇到函數參數傳遞的問題;比如 A調用B,B調用C,C調用D, A->B->C->D 而D方法可能需要一個參數,這個參數只能在A中獲取(比如A是控制器方法),這個參數這樣一

PHP 技巧__callStatic魔術方法使用

    使用 PHP 框架時,經常會用到 ORM 模型查詢資料庫,有沒有疑問:為啥有些 ORM 中的靜態查詢方法,不能通過函式追蹤下去呢,很有可能就是使用了 __callStatic 魔術方法的小技巧   這裡貼一個 簡單的 ORM 模型 1、先抽象一個基本操

python3技巧:如何判斷字串是數字

     python中的字串有專門判斷是否為數字的函式isdigit(),當字元中的元素全部是整數,而且至少有一個字元時返回True,否則返回False。 >>> '1235'.isdigit() True >>> '1'.is

XShell技巧以root許可權登入與隧道訪問

這裡記錄一下兩個小技巧:以root登入與隧道訪問。 XShell以root許可權方式登入 需要設定登入指令碼:sudo su  這個命令會要求我們輸入root賬號的密碼 我們還需要新增一個密碼: 確定,連上之後預設就是管理員了。 開啟隧道訪問

XShell技巧:以root許可權登入與隧道訪問

這裡記錄一下兩個小技巧:以root登入與隧道訪問。 XShell以root許可權方式登入 需要設定登入指令碼:sudo su  這個命令會要求我們輸入root賬號的密碼 我們還需要新增一個密碼

技巧將瀏覽器當作臨時記事本使用

今天發現一個比較實用的小技巧,新建一個瀏覽器視窗在裡面打字,可以當作簡單的 notepad 用,比如臨時記點東西什麼的,這樣不必每次開 Notes/TextEdit/Vi/Evernote 之類的工具了。 開啟瀏覽器,在位址列裡敲入下面這行: data:text/html, <html con

Linux技巧給man pages設定高亮顏色

Linux作業系統提供了豐富的幫助手冊,當你需要檢視某個命令的引數時不必到處上網查詢,只要man一下該命令即可。在windows中F1可能不經常用,但在linux中man命令可是比不可少的。 預設的man pages只有一種顏色,有些文字是進行加粗的,習慣了vim的顏色高亮顯示,man pages顯

Linux技巧history命令用法15例

作為Linux系統工程師,在分析系統的安全或故障問題時,經常會使用history(歷史)命令檢視系統的歷史操作記錄,這篇文章將通過例項的方式向你介紹history命令相關的15個小技巧…… 1. 使用 HISTTIMEFORMAT 顯示時間戳 當你從命令列執行 history 命令後,通常只會顯示已

vue技巧偷懶的檔案路徑——減少不必要的程式碼

  眾所周知,我們寫vue專案的時候都會建立很多個檔案,尤其是一些中大型專案,會有很深的資料夾,當你去引入的時候,要寫很長的路徑比如我要引入一個css檔案, 必須得  import  '../../../styles/iconfont.css'  ,檔案放的越深,路徑就越長,所以我來說一個小技巧。   當我們

實用技巧電腦如何滾動截圖/擷取長圖

首先準備一個叫FScapture的工具,該工具雖然簡單卻很強大,我用的是綠色漢化版的,免安裝。需要的可以在此下載:http://pan.baidu.com/s/1dDyCuI11、解壓後雙擊名為【FSC

Python技巧——基類初始化

子類__init__初始化時,如果要對基類進行初始化,大家都知道可以用super:>>> class base(object): def __init__(self): print('base init') >>> clas

PHP使用curl技巧查詢某個連結或者文章是否被百度收錄

    這個東西嘞,網上有好多的工具啥的。比如買鏈幫手啥的都可以用來查詢自己的連結或者文章是否被百度或者360等等收錄。然而我研究這個東西呢,是因為公司內部需要大量使用這個功能,用工具的話,它收費先不說

【python Excel】如何使用python將大量資料匯出到Excel中的技巧

最近對python的openpyxl 升級到了__version__ = '2.5.4',發現原先的程式碼不能使用,各種報錯之後,然後重新了寫的版本,故分享給各位同仁。如有錯誤,敬請賜教。# coding:utf-8 """ File Name: Excel.py Func

Fiddler技巧新增請求耗時/IP/Method列

      新增列的方法,網上可以查到,這裡整理下。       請求耗時:       直接加在Handlers{ 後面 public static BindUIColumn(

Android開發中EditText技巧如何設定游標顏色及粗細

有時為了使用者體驗感更好,所以我們需要對EditText的游標進行設定,這裡就是關於游標顏色和粗細的設定,非常簡單。 第一步:在資原始檔drawable下新建一個游標控制edittext_color_cursor.xml <?xml version="1.0" e

開發技巧在Application中監聽App中的Activity的生命週期

在有一些場景下,需要我們在app從後臺程序到前臺程序的切換過程中,做一些操作,如展示一個公司廣告頁面等等情況。這個時候,我們可以在我們的Application中來監聽當前App的狀態,Google已經給我們封裝好了方法: public class MyAppl

使用plsql操作oracle資料庫技巧儲存使用者名稱和密碼

每次plsql連線資料庫,輸入使用者名稱密碼很煩,直接點選儲存好的使用者名稱密碼: 步驟: 1、點選plsql的preferneces首選項,進入首選項視窗, 2、找到oracle項,下面有logon history,登入歷史, 3、點選登入歷史項,找到fixed U