2017-06-27 63 views
2

我正在使用Hive數據在PySpark Shell中工作。這裏的目標是收集多個項目的計數器。下面我有一個示例數據框和數據查詢。我使用的資源:Is it possible to specify condition in Count()?,但它是用於有限的計數器。SQL查詢分隔計數器

DriveHealth = sqlContext.sql("Select Health From testdrivestatus")

Health | 
---------- 
Healthy 
Healthy 
Error A 
Error B 
Error C 

這裏的目標是創建計數器將計:

  1. 與健康驅動器數量爲健康

  2. 驅動器數量與健康是不是健康,所以錯誤A,錯誤B和錯誤C.

  3. 有獨立的健康狀況因此對健康的計數器,錯誤A,錯誤B和錯誤驅動器數量C.

在這種情況下,我們有這樣的事情......

Health Counter 
-------------- 
Healthy: 2 
Unhealthy: 3 
Error A: 1 
Error B: 1 
Error C: 1 

東西我都試過了,這對於案件少量的工作,但我有超過60個不同的健康狀態,我想知道是否有更好的方法來做到這一點:

DriveHealth = sqlContext.sql("Select 
Count(case Health when 'Healthy' then 1 else null end) as Healthy, 
Count(case Health is not 'Healthy' then 1 else null end) as UnHealthy, 
Count(case Health when 'Error A' then 1 else null end) as ErrorA, 
... (skipping typing Through Error C) 
From testdrivestatus 

回答

1

你想要做的是group by你的健康專欄。

select 
    count(*) as total, 
    Health 
from 
    testdrivestatus 
group by 
    Health 
+0

呃!無聊的時刻給我。謝謝。我會盡快接受。 – Travis

+0

如何添加不健康的列?我只需要在不健康的情況下做出獨立的情況? – Travis

+0

@ TJ72我不知道你正在使用哪個數據庫引擎,但經驗法則是任何非聚合值(即選擇一列而不是計數/總和/平均值等)應該在你的組中。因此,例如,要添加「ErrorCode」列,您可以執行SELECT count(*),Healthy,ErrorCode FROM testdrivestatus GROUP BY Health,ErrorCode' – RToyo