hive - 配置单元中集合中元素的平均数量?

标签 hive aggregate-functions explode hiveql apache-hive

enter image description here

我有两列 id 和段。段是逗号分隔的字符串集。我需要找到所有表中的平均段数。一种方法是使用两个单独的查询 -

A - select count(*) from table_name;
B - select count(*) from table_name LATERAL VIEW explode(split(segment, ',') lTable AS singleSegment where segment != ""
avg = B/A

在上述情况下,答案为 8/4 = 2。

是否有更好的方法来实现这一目标?

最佳答案

尝试:

select sum(CASE segment 
           WHEN '' THEN 0 
           ELSE  size(split(segment,','))
           END
           )*1.0/count(*) from table_name;

如果您的 id 字段是唯一的,并且您想要向段部分添加过滤器,或防止其他格式错误的 segment 值,例如 a、b、a,,b,你可以这样做:

SELECT SUM(seg_size)*1.0/count(*) FROM (
    SELECT count(*) as seg_size from table_name
    LATERAL VIEW explode(split(segment, ',')) lTable AS singleSegment
    WHERE trim(singleSegment) != ""
    GROUP BY id
) sizes

然后您可以将其他内容添加到 where 子句中。

但是与更简单的查询相比,此查询需要运行两个 Hive 作业,并且要求 id 字段是唯一的。

关于hive - 配置单元中集合中元素的平均数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36800480/

相关文章:

php - 创建具有随机值 PHP 的关联数组

php - 如何从一个函数返回多个值

hadoop - Spark 上的 Hive 2.1.1 - 我应该使用哪个版本的 Spark

apache-spark - 将数据从 CSV 文件映射到 HDFS 上的 Hive 表时出错

mysql - 计算字段的总和

sql-server - 将 PERCENTILE_DISC 与聚合函数一起使用

sql - 如何组合一个返回多行的 Mysql(子)查询的结果并将其用于另一个查询

java - EMR - Hive 和 Java 结合在一起

scala - Spark SQL error..org.datanucleus”已注册

php - 将逗号分隔的字符串拆分为数组?