【问题标题】:Combination of MapReduce and HiveMapReduce 和 Hive 的结合
【发布时间】:2014-01-17 04:11:03
【问题描述】:

我们可以使用HiveMapReduce 中的combination

说:我有一个 csv 文件。我需要找到一列的mean 并将空数据替换为平均值(replace null with mean)。

所以我们是否可以在驱动程序中写一个hive query(找到平均值)然后写一个mapreduce块来用平均值替换空值。

哪个更好

  1. 只编写 mapreduce 代码或
  2. 结合使用 hive 和 mapreduce。

【问题讨论】:

    标签: java hadoop mapreduce hive


    【解决方案1】:

    这是可以使用 (only hive) 解决的另一个答案

    说你的 csv 输入是这样的:

    firstname,secondname,score,group
    

    vijay,kumar,123,cse

    satish,babu,,it

    kumar,nagendra,200,eie

    阿尼尔,巴布,它

    然后像这样应用查询(我运行它有效):

    hive> from students s join (select avg(score)as avg from students) a
    > select s.firstname,
    > case
    > when s.score="" or s.score=NULL then  cast(avg AS string)
    > else s.score
    > end as new_score ;
    

    MapReduce 作业总数 = 2

    输出:

    好的

    firstname       new_score
    

    维杰123

    满足 161.5

    库马尔 200

    161.5

    耗时:67.059 秒,提取:4 行

    【讨论】:

    • 感谢 sree :) ,顺便说一下,使用 csvserde 通过 csv 输入让您的工作变得轻松
    • 我们是否也可以使用 Hive 进行聚合(例如每列的 max 、min、sum、mean、sd)。对于哪个更好(Hive/mapReduce)
    • 是的,我们可以使用 hive 进行所有聚合。但是要在单个配置单元查询中实现所有这些事情会导致查询的复杂性和性能。在这种情况下(以良好的延迟实现所有聚合)使用 mapreduce-refer mapreduce 设计模式 > 汇总模式。
    【解决方案2】:

    在我看来,

    最好只写一个mapreduce代码。(用job1求平均值,然后只映射job2来替换,这很容易)。 hive 和 MR 的组合会有点混乱(原因是你要在一个代码中编写这两个代码,必须将它运送到集群节点一个 jar,我们不能说这些任务将在哪里运行,我的意思是 hive 命令执行的位置点将是)。

    希望这会有所帮助。谢谢:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多