Hadoop 要使用的类型:自定义数据类型或TwoDArrayWritable

Hadoop 要使用的类型:自定义数据类型或TwoDArrayWritable,hadoop,mapreduce,Hadoop,Mapreduce,为了将2个矩阵作为键值对发出: Key - Matrix A 值-矩阵B 我应该创建一个自定义数据类型,还是可以直接使用TwoDArrayWritable?那么自定义类中的compareTo()方法呢?您肯定需要为您的键编写自定义类,因为TwoDArrayWritable没有实现WritableComparable(即使您只是扩展TwoDArrayWritable类来添加接口和compareTo方法) 至于是否应该在自定义类上使用TwoDArrayWritable,这取决于几个因素(在我看来

为了将2个矩阵作为键值对发出:

Key  - Matrix A
值-矩阵B


我应该创建一个
自定义
数据类型,还是可以直接使用
TwoDArrayWritable
?那么自定义类中的compareTo()方法呢?

您肯定需要为您的键编写自定义类,因为
TwoDArrayWritable
没有实现
WritableComparable
(即使您只是扩展
TwoDArrayWritable
类来添加接口和
compareTo
方法)

至于是否应该在自定义类上使用TwoDArrayWritable,这取决于几个因素(在我看来):

  • 阵列的大小/尺寸是否固定?如果是这样,我会说使用一个自定义类,这样可以节省性能,而不是为每个对象反序列化调用重新创建数组
  • 数组是否包含基元类型(int、double、float等)——如果是这样,我会再次说使用自定义类,这样在执行下游矩阵操作时,就不必担心从它们的包装器可写(IntWritable、DoubleWritable等)中包装/解包基元值了

您肯定需要为密钥编写自定义类,因为
TwoDArrayWritable
没有实现
WritableComparable
(即使您只是扩展
TwoDArrayWritable
类来添加接口和
compareTo
方法)

至于是否应该在自定义类上使用TwoDArrayWritable,这取决于几个因素(在我看来):

  • 阵列的大小/尺寸是否固定?如果是这样,我会说使用一个自定义类,这样可以节省性能,而不是为每个对象反序列化调用重新创建数组
  • 数组是否包含基元类型(int、double、float等)——如果是这样,我会再次说使用自定义类,这样在执行下游矩阵操作时,就不必担心从它们的包装器可写(IntWritable、DoubleWritable等)中包装/解包基元值了

Thx Chris White供您回复。我的阵列不是固定大小/尺寸的,但始终是双倍的。所以最好为键和值创建一个自定义类,对吗?是的,我创建了类。但是如何编写CompareTo()方法以发出键(矩阵)CompareTo方法可以通过多种方式实现,其中一种方法是首先比较两个维度的大小以进行排序,如果它们匹配,则深入到矩阵,每次一个元素thx Chris White供您回复。我的数组没有固定大小/维度,但它将始终是双倍的。所以最好为键和值创建一个自定义类,对吗?是的,我创建了类。但是如何编写CompareTo()方法以发出键(矩阵)CompareTo方法可以通过多种方式实现,其中一种方法是首先比较两个维度的大小以进行排序,如果它们匹配,则深入到矩阵,一次一个元素