`
bupt04406
  • 浏览: 348397 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

hive的distribute by如何partition long型的数据

    博客分类:
  • Hive
 
阅读更多

有用户问:hive的distribute by分桶是怎么分的。如果distribute by sellerId , reduce个数设的20,那是按照sellerId mod 20来分桶吗?sellerId 是bigint类型。

原先我也以为是这样子的,但是用户提出了疑问:很奇怪,跑出来的结果,有一小部分数据不对。这是sellerId,按照 mod的话,应该在第8分文件,但是却在第0份文件中

 

 

  public static int hashCode(Object o, ObjectInspector objIns) {
    if (o == null) {
      return 0;
    }
    switch (objIns.getCategory()) {
    case PRIMITIVE: {
      PrimitiveObjectInspector poi = ((PrimitiveObjectInspector) objIns);
      switch (poi.getPrimitiveCategory()) {
      case VOID:
        return 0;
      case BOOLEAN:
        return ((BooleanObjectInspector) poi).get(o) ? 1 : 0;
      case BYTE:
        return ((ByteObjectInspector) poi).get(o);
      case SHORT:
        return ((ShortObjectInspector) poi).get(o);
      case INT:
        return ((IntObjectInspector) poi).get(o);
      case LONG: {
        long a = ((LongObjectInspector) poi).get(o);
        return (int) ((a >>> 32) ^ a);
      }
      case FLOAT:
        return Float.floatToIntBits(((FloatObjectInspector) poi).get(o));
      case DOUBLE: {
        // This hash function returns the same result as Double.hashCode()
        // while DoubleWritable.hashCode returns a different result.
        long a = Double.doubleToLongBits(((DoubleObjectInspector) poi).get(o));
        return (int) ((a >>> 32) ^ a);
      }
      case STRING: {
        // This hash function returns the same result as String.hashCode() when
        // all characters are ASCII, while Text.hashCode() always returns a
        // different result.
        Text t = ((StringObjectInspector) poi).getPrimitiveWritableObject(o);
        int r = 0;
        for (int i = 0; i < t.getLength(); i++) {
          r = r * 31 + t.getBytes()[i];
        }
        return r;
      }
      case TIMESTAMP:
        TimestampWritable t = ((TimestampObjectInspector) poi)
            .getPrimitiveWritableObject(o);
        return t.hashCode();
      default: {
        throw new RuntimeException("Unknown type: "
            + poi.getPrimitiveCategory());
      }
      }
    }
    case STRUCT:
    case LIST:
    case MAP:
    case UNION:
    default:
      throw new RuntimeException(
          "Hash code on complex types not supported yet.");
    }
  }

 hive的Partitioner是DefaultHivePartitioner

  /** Use {@link Object#hashCode()} to partition. */
  public int getBucket(K2 key, V2 value, int numBuckets) {
    return (key.hashCode() & Integer.MAX_VALUE) % numBuckets;
  }

 写了个java程序测试一下发现3591111568这个id的数据确实是分到了reduce0去了

    long a = 3591111568L;
    int hashcode = (int) ((a >>> 32) ^ a);
    System.out.println((hashcode & Integer.MAX_VALUE) % 20);

 所以如果要达到用户的目的那么需要改成 distribute by sellerId%20

分享到:
评论

相关推荐

    Hive数据仓库之垃圾分类数据分析系统

    (3)sqoop数据迁移,完成HIve与MySQL数据库中的数据交互 (4)Echarts搭建动态可视化大屏 (5)SpringBoot搭建可视化后台系统,完成前端与后台的数据传递与交互。 (6)基于Cenots7 搭建虚拟机,配置Hadoop、HDFS、...

    利用Hive进行复杂用户行为大数据分析及优化案例

    利用Hive进行复杂用户行为大数据分析及优化案例(全套视频+课件+代码+讲义+工具软件),具体内容包括: ...15_Hive中的数据倾斜及解决方案-group by 16_Hive中使用正则加载数据 17_Hive中使用Python脚本进行预处理

    《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf

    《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第...

    大数据 hive 实战数据

    在大数据处理领域,Hive是一个极其重要的工具,它被广泛应用于大数据分析和数据仓库操作。本实战数据集主要涉及两个核心部分:`video`数据和`user`数据,这些都是构建大数据分析模型的基础元素。让我们深入探讨一下...

    Hive metastore 使用达梦数据库存储元数据

    通常,Hive元数据默认存储在MySQL或Derby等关系型数据库中。然而,为了适应更复杂的业务需求和更高的性能,我们可以选择将Hive元数据存储在达梦数据库中。本文将详细介绍如何配置Hive metastore以使用达梦数据库。 ...

    《Hive数据仓库案例教程》教学大纲.pdf

    《Hive数据仓库案例教程》教学大纲主要涵盖了Hive在大数据环境中的应用,以及如何通过Hive构建数据仓库。Hive作为一个基于Hadoop的数据仓库工具,它的主要功能是将结构化的数据文件映射为数据库表,并提供SQL-like...

    Hive.sql,hive的元数据

    Hive.sql

    datax数据从hive导入mysql数据缺失解决

    在大数据处理领域,Hive 和 MySQL 分别作为数据仓库与关系型数据库的重要组成部分,在数据流转过程中承担着关键角色。Hive 通常用于存储海量数据并进行批处理分析,而 MySQL 则用于存储结构化数据并提供快速查询服务...

    spark或mr引擎插入的数据,hive表查询数据为0

    - 或者,在Tez执行的QL语句末尾添加`DISTRIBUTE BY`关键字来强制触发一次Reduce过程,这有助于整理数据分布,并减少子目录带来的影响。 ##### 解决方案二:查询时的引擎配置优化 1. **MR查询时的配置**: - 在MR...

    hive数据加载导出查询

    ### Hive 数据加载与导出详解 #### 创建 Hive 表 在使用 Hive 进行数据分析之前,首先需要创建一张表来存储数据。以下是一段创建分区表的 SQL 语句示例: ```sql CREATE TABLE db_0309.emp ( empno INT, ename ...

    基于 Hive的数据分析案例 -MM聊天软件数据分析

    基于 Hive 的数据分析案例 -MM 聊天软件数据分析 本资源摘要信息主要介绍了基于 Hive 的数据分析案例,通过对 MM 聊天软件的数据进行统计分析,了解用户行为,实现精准的用户画像,并为公司的发展决策提供精确的...

    hive.ziphive数据迁移和数据分析

    6. **分桶和排序**:Hive的DISTRIBUTE BY和CLUSTER BY语句可实现数据的预排序和分桶,这对于并行处理和JOIN操作的优化非常有帮助。 7. **数据导出**:处理完数据后,可以使用`INSERT OVERWRITE`将结果写回HDFS,...

    项目实战——钉钉报警校验ElasticSearch和Hive数据仓库内的数据质量(Java版本)

    此篇文章主要选取关键性指标,数据校验数据源Hive和目标ES内的数据是否一致; 因为你不知道将Hive的数据导入到了ElasticSearch后,数据量是否准确,所以需要钉钉报警校验ElasticSearch和Hive数据仓库内的数据质量,...

    Hive拉拉扯扯的order by,sort by,distribute by, cluster by

    Hive支持两个层面的排序: 全局排序 部分排序 全局排序用 order by col [ASC | DESC] 实现,效果和传统的RDMS一样,...鉴于此,Hive有一些自己特定,比如order by的实现需要把所有数据汇集到一个reducer中处理,如果数

    Hive的Udf函数进行数据脱敏

    在大数据处理领域,Apache Hive 是一个非常重要的工具,它提供了SQL-like接口来处理存储在分布式存储系统(如HDFS)中的大规模数据集。Hive 的 User Defined Functions (UDFs) 是用户自定义函数,允许开发者扩展Hive...

    Hive几种数据导入方式

    ### Hive 数据导入方式详解 Hive 是一种广泛应用于大数据处理领域的工具,它为用户提供了类 SQL 的查询语言 HiveQL,使用户能够更加便捷地进行数据提取、转换与加载(ETL)。本文主要针对 Ambari 搭建的 Hadoop ...

    基于Hadoop的数据仓库Hive学习指南.doc

    【标题】:“基于Hadoop的数据仓库Hive学习指南” 【描述】:该文档是一份针对Hive的学习资料,旨在引导读者理解如何在Hadoop平台上利用Hive进行数据仓库操作和编程实践。它涵盖了Hive的基本概念、安装步骤、实验...

    java解决hive快速导数据到Hbase代码

    在大数据处理领域,Hive和HBase是两个重要的组件,分别用于数据仓库和实时数据分析。本文将详细讨论如何使用Java编程语言实现从Hive到HBase的快速数据导入方案。 首先,Hive是一个基于Hadoop的数据仓库工具,它可以...

    基于SpringBoot+hiveJDBC+echarts的数据大屏可视化和大数据分析源码+项目使用说明.zip

    基于SpringBoot+hiveJDBC+echarts的数据大屏可视化和大数据分析源码+项目使用说明.zip 【项目介绍】 使用Hadoop技术可快速生成分析结果,对6万条美妆销售数据分析,将数据转化为有价值的数据。 在Centos7中搭建 ...

Global site tag (gtag.js) - Google Analytics