美文网首页
当Java的枚举类型遇到Spark

当Java的枚举类型遇到Spark

作者: AlstonWilliams | 来源:发表于2018-09-15 11:16 被阅读68次

其实不仅仅是Spark,也适用于其他的分布式技术。

假设我们有这么一个Java枚举类:

public enum AtomicType {
  NORMAL, CHECK
}

在本机上测试一下它们的hashcode,你会看到它们是相同的。

但是,要注意,这并不意味着,在分布式环境中,它们也是相同的。

我们先来说明枚举类的hashcode是怎样生成的。

我们进入到Enum这个类,看它的hashCode()方法,可以看到,最终它是调用了Object.hashCode()。而Object.hashCode(),我们从它的注释中,可以看到,是由内存地址转换来的。

所以,当我们在Spark的Executor进行操作后,返回一个涉及到枚举类型的key,然后执行aggregateByKey(),就会发现,看起来明明是一模一样的key,为什么会被当成两个。

其实不仅仅是Spark,其他的分布式技术,也要注意这个问题。小小的一个bug,害我调了两天,夜不能寐,好不容易才调好。

相关文章

  • 当Java的枚举类型遇到Spark

    其实不仅仅是Spark,也适用于其他的分布式技术。 假设我们有这么一个Java枚举类: 在本机上测试一下它们的ha...

  • 枚举

    枚举 wiki Java的枚举类型用法介绍 深入理解Java枚举类型(enum) 为什么要用enum? 学习计划 ...

  • [Kotlin Tutorials 5] 枚举和Sealed C

    枚举和Sealed Class 枚举 首先, Kotlin和Java一样, 也是有枚举类型的: 枚举类型还可以实现...

  • Java中的枚举,这一篇全了,一些不为人知的干货

    Java枚举,也称作Java枚举类型,是一种字段由一组固定常量集合组成的类型。枚举的主要目的是加强编译时类型的安全...

  • Java Enum

    Enum 类型的介绍 枚举类型是Java5新增的特性之一,枚举是一种特殊类型的类,其枚举的每一个值都是该枚举类的一...

  • Java线程状态

    Java线程状态 Java线程有六个状态,可以在Thread类中的枚举类型State中查看。 1. NEW 当Th...

  • Java中的枚举详解

    定义枚举 JDK1.5引入了一种新的数据类型枚举类型。Java使用关键字enum声明枚举类型,语法格式如下: en...

  • java 读取hive报错java.lang.Byte cann

    spark Core 读hive 表数据 遇到 的问题: 当hive 的字段类型为 tinyint 时, 报错: ...

  • Java枚举总结

    Java枚举总结 枚举类型比较简单,下面两个文章讲的比较清楚: Java 枚举(enum) 详解7种常见的用法 深...

  • java枚举类型

    Java中的枚举就像任何其他类一样,具有一组预定义的实例。 这里有几个例子来强调如何使用Java Enum。 1....

网友评论

      本文标题:当Java的枚举类型遇到Spark

      本文链接:https://www.haomeiwen.com/subject/afmzgftx.html