【问题标题】:Sorting by average, then inserting into new table using Hive按平均排序,然后使用 Hive 插入新表
【发布时间】:2013-04-28 07:56:14
【问题描述】:

我有一个大数据文件,如下所示:

    1   6
    1   6
    2   7
    3   2
    3   6
    1   7
    1   9
    2   9
    1   5
    3   9
    3   1
    2   8

我想按第一列对数据进行分组,找到每个第一列值的第二列平均值,然后按第二列平均值对这些分组进行排序。所以输出应该是:

    2   8
    1   6.6
    3   4.5

我的代码现在看起来像这样,但不起作用:

    CREATE EXTERNAL TABLE as (a STRING, b INT)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
    LOCATION 's3n://myfolder/hive';

    CREATE EXTERNAL TABLE output(a STRING, avgb DOUBLE)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
    LOCATION 's3n://myfolder/hive';

    load data inpath "s3n://myfolder/file.txt" into TABLE as;
    insert overwrite output select a, avg(b) from as group by a order by avg(b) DESC limit 1000;

我应该注意,以下内容确实有效,但在 SQL 中对我有用的 order by 和 insert 步骤不起作用:

    select a, avg(b) from as group by a;

当我尝试时:

    select a, avg(b) from as group by a order by avg(b);

我收到“失败:语义分析错误:第 1:66 行无效的表别名或列引用‘b’:(可能的列名是:_col0、_col1)。

【问题讨论】:

    标签: sql mapreduce hive


    【解决方案1】:

    只需在子查询中将其移出:

    select a
    from (select a, avg(b) as avgb from as group by a) as t
    order by avgb;
    

    【讨论】:

    • 放入子查询的具体原因??你能解释一下吗
    • @vikrantrana:看问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    相关资源
    最近更新 更多