優化指標生成這是一個優化的問題,這是我現在的(工作)情況:星火,從DF
- 星火使用火花jobserver在單機模式下運行;
- 我有一個帶有〜3M行緩存的鑲木地板文件作爲表格;
- 該表是來自電子商務網站的所有數據的綜合數據,每行代表一個用戶,但用戶可以有更多的行;
客戶端請求是執行SQL查詢,並且在一些表的網頁上顯示的結果,每一個表示一個度量與計數器,如:
年齡=> 18-20 :15個用戶,21-35:42級的用戶,......
國家=> USA:22用戶,GB:0個用戶,...
等。計算所有表格(連同一些關於用戶會話,根據活動,期間和年份生成的),目前約有200個指標。
在生產使用最後釋放系統(考慮DF從SQL查詢得到的數據幀):
df.rdd.aggregate(metricsMap) (
(acc: MetricsMap, r:Row) => {
acc.analyzeRow(r)
acc
},
(acc1: MetricsMap, acc2: MetricsMap) => {
acc1.merge(acc2)
acc1
}
)
凡MetricsMap是用於提取和從行聚合數據的對象。
該操作是非常CPU密集型,並在服務器上花費約20秒,以提取一個查詢的數據不帶參數(因此從地板文件中的所有數據)。
我決定使用聚合,因爲對於他們的統計分析,他們想要多個潛在客戶:一些指標應該用用戶密鑰來計算,另一個用戶名(用於網站......),另一個用產品密鑰。使用這種方法,我不得不通過結果循環只有一次,但我不知道這是否是更好的辦法...
這是更好的方法,也存在着一些其他的(快)方法來獲得同樣的結果?
至於有關計算指標事前,他們可以對數據集執行查詢不約束的問題,所以我不知道這是可能的或不...能不能請你給我一個例子嗎?
回答一些問題,在這種情況下,數據的
你能否提供更多有關聚合的信息?基本上,有沒有原因讓你回到rdd而不是在dataframe/SQL級別工作? –
您可以預先計算指標嗎? –