【问题标题】:SQL Query Separated CountersSQL 查询分隔计数器
【发布时间】:2017-11-30 17:30:53
【问题描述】:

我正在使用带有 Hive 数据的 PySpark Shell 工作。这里的目标是为多个项目收集计数器。下面我有一个示例数据框和数据查询。我使用的资源:@​​987654321@,但它适用于有限的计数器。

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

【问题讨论】:

    标签: sql pyspark


    【解决方案1】:

    你想要做的是group by你的健康专栏。

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

    【讨论】:

    • 呃!对我来说是沉闷的时刻。谢谢你。我会尽快接受。
    • 如何添加不健康的列?我是否只需要单独提出一个不健康的案例?
    • @TJ72 我不知道您使用的是哪个数据库引擎,但经验法则是任何非聚合值(即选择一列而不是计数/求和/平均/等)都应该在你的小组中。例如,要添加“ErrorCode”列,您可以执行 SELECT count(*), Healthy, ErrorCode FROM testdrivestatus GROUP BY Health, ErrorCode
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多