高速發展的資訊化技術使得與空間位置相關的資料積累越來越多,空間資料的儲存、分析與視覺化傳統技術已逐漸無法滿足需求,亟需使用承載力更強、可靠性更高、計算速度更快的方法。分布式技術為空間大資料的處理與分析提供了有效的解決方案,下面就以乙個十億資料量級別的計程車位置資料為例,為大家介紹如何使用分布式技術進行空間大資料的視覺化與分析。
紐約市計程車和轎車管委員會(tlc)目前公開發布了詳細的計程車歷史資料集,包括了從2023年1月到2023年6月期間幾十億條的城市內部個體計程車載客記錄。每條記錄都包括載客的上下車地點、上下車時間,以及載客距離、載客時長、車輛型別等資訊。
這為我們研究計程車的運營情況以及乘客的出行模式提供了可能,如各行政區不同型別的計程車分布情況,工作日各時段從某居民區打車到達機場的耗時情況,乘客下車地點對計程車接到下一單的等待時間的影響等。
這些含有計程車上下客資訊的資料集以csv檔案的方式提供,spark有專門的函式來將這種記錄間以換行符分隔的檔案轉換為rdd,rdd的每個元素即一行文字資訊。接下來我們需要做的是提取每行中按逗號分隔的屬性資訊,其中的時間資料即上下車時間和空間資料即上下車地點對於接下來要進行的時空分析是十分重要的。
首先我們需要知道每種屬性對應的列號,來將相應的字串轉成我們需要的型別如整型、浮點型或時間型別,再將浮點座標構造成supermap iobjects for spark中的點型別的feature或包含時間特徵的featurehastime物件。一般來說,通過閱讀資料格式說明及資料的前幾行記錄,我們即可明確這些資訊。然而需要注意的是,對於大規模資料集,經常有一些記錄不滿足資料格式的要求,它們或者字段個數與其它記錄不同,或者資料型別不符,而查詢這些錯誤又要耗費額外的資源,在此我們建議使用try-catch機制來忽略掉這些錯誤記錄。
另外我們還需要考慮資料可能存在的資料質量問題,例如,針對紐約計程車資料我們觀察到,有些記錄的上車時間竟然晚於下車時間,有些記錄的座標資訊超出了經緯度的有效範圍或全部為零,還有一些雖然座標合法但距離紐約市非常遠。對於這些情況,我們就需要根據對資料的合理期望來過濾不合理的資料。supermap iobjects for spark產品模組中提供了針對featurerdd的屬性條件過濾及空間範圍過濾介面,可以支援這類資料預處理的需求。例如以紐約全市覆蓋的經緯度區域為邊界來做bounds過濾,或使用紐約市的行政區面物件來對上落車座標點做相交查詢,在麵內的才認為是有效資料。
在紐約,計程車分為兩類:黃色和綠色。黃色計程車可以在紐約五大區內任何地點搭載乘客。綠色計程車則被規定只允許在上曼哈頓、布朗克斯區、皇后區和斯塔滕島接客。我們可以將計程車載客的上車地點疊加顯示在紐約街道地圖上,來直接展示兩種計程車上客位置的不同以及它們各自的上客熱點區域。
然而由於資料量過大,如下所示的散點圖效果並不好,點的互相疊加產生了一定的視覺干擾,並且不論地圖顯示還是生成快取的耗時都很長。
圖1 計程車載客點疊加顯示
因此我們考慮對原始資料進行聚合統計,這裡使用紐約計程車區劃面資料來對黃色計程車的載客上客點記錄進行聚合,之後按每個區域的點數統計值來渲染地圖,顏色越深表示該區域發生的載客行為越多。如下圖,曼哈頓地區的載客行為明顯要多於其它區域,而皇后區東南和北部的兩處載客活躍地塊,則分別是甘迺迪國際機場和拉瓜迪亞機場。
圖2 用區劃面對上客位置點數進行聚合分析
我們還可以對黃綠兩種計程車的載客記錄分別進行熱度圖渲染,來分析全市載客行為的整體分布趨勢,這裡使用supermap iobjects for spark的核密度計算功能。將密度較小區間的顏色設為透明後,如下圖,可以很直觀的看到黃綠兩色計程車各自的載客熱點區域。
圖3 載客位置熱度圖
將上圖放大至上東區與東哈萊姆區交界的位置,也即黃綠色計程車載客分界線上,如下圖,這是綠色計程車的乙個載客熱點區域。
圖4 黃綠計程車交界處熱度分布圖
現在我們研究乘客下車位置對計程車等待下一單生意的等單時間的影響。
為了計算每輛車或每個司機的等單時間,我們需要將所有載客記錄按車輛或司機的唯一id來對記錄進行分組,然後將這些分組後的載客記錄按時間排序。排序讓我們可以計算一次載客記錄的下客時間和下一次載客記錄的上客時間的時間間隔即等單時間。由於涉及到隱私問題,2023年後的計程車資料不再提供車牌號或司機駕照資訊,因此這裡使用2023年的資料來進行分析。
首先我們使用原始資料構造featurerdd,其中的feature元素是以上客地點為幾何物件、以上客時間為時間特徵的featurehastime型別,同時記錄車牌號、下客時間和下客點座標作為feature的普通屬性。之後我們按車牌號字段值對該featurerdd進行分組,並過濾掉記錄數小於2的分組。
接下來我們對每個分組中的記錄進行上客時間的排序,然後對排序結果中的兩兩記錄計算下客時間和下一單上客時間的時間間隔,並與下客地點聯合構造為乙個新的feature,在這個過程中,過濾掉間隔時間為負的錯誤記錄和間隔時間大於三小時即司機可能在休息的記錄。
這樣,我們就得到了乙個有關下客地點和等單時間的新的featurerdd,使用計程車區劃面資料來對該featurerdd進行點在麵內聚合處理,其中聚合統計欄位即等單時間,統計方式為平均值。將最後得到的聚合面資料集進行單值渲染,顏色越深表示等單時間越短,可得如下的地圖效果。
圖5 計程車等單時間與下客區域的關係
地圖整體表現出下客地點越繁華,計程車等單時間越短的趨勢,曼哈頓地區的等單時間明顯短於其它地區。比較特別的是兩處機場區域,雖然由之前的分析得知機場的載客行為很密集,但載客到達機場的司機並不能很快獲得下一單生意。
大資料小白系列 HDFS 2
這裡是大資料小白系列,這是本系列的第二篇,介紹一下hdfs中secondarynamenode 單點失敗 spof 以及高可用 ha 等概念。首先,在啟動的時候,將磁碟中的元資料檔案讀取到記憶體,後續所有變化將被直接寫入記憶體,同時被寫入乙個叫edit log的磁碟檔案。如果你熟悉關係型資料庫,這個...
大資料匯出2
經過幾天的折騰,終於把這個頑固的工程做完了,現在60萬資料40秒匯出到本地。嘗試了很多的辦法,現在放上最優秀的做法供參考。第一,優化資料表,加上相應的索引,分割槽。第二,讀庫操作。分多執行緒,採用threadpool。第三,匯出操作,1 採用aspose.cells 2 採用多檔案方式,要麼以記錄行...
大資料作業2
1 最高準則 無二義性 對這個準則的理解 c 語言在程式設計時,為了防止同一語句有多種含義,產生歧義,乙個語句只能有一種執行方式,得到唯一的結果。準則的具體體現 1 運算子的優先順序與結合性 優先順序是為了消除如1 23的表示式,應被當成 1 2 3計算還是1 23 計算的二義性而制定的規則。示例 ...