当前位置: 首页 > 面试题库 >

使用ArrayWritable进行序列化似乎很有趣

柳鸿博
2023-03-14
问题内容

我正在一起工作ArrayWritable,有时需要检查Hadoop如何序列化ArrayWritable,这是通过设置获得的job.setNumReduceTasks(0)

0    IntArrayWritable@10f11b8
3    IntArrayWritable@544ec1
6    IntArrayWritable@fe748f
8    IntArrayWritable@1968e23
11    IntArrayWritable@14da8f4
14    IntArrayWritable@18f6235

这是我正在使用的测试映射器:

public static class MyMapper extends Mapper<LongWritable, Text, LongWritable, IntArrayWritable> {

    public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        int red = Integer.parseInt(value.toString());
        IntWritable[] a = new IntWritable[100];

        for (int i =0;i<a.length;i++){
            a[i] = new IntWritable(red+i);
        }

        IntArrayWritable aw = new IntArrayWritable();
        aw.set(a);
        context.write(key, aw);
    }
}

IntArrayWritable摘自javadoc:ArrayWritable中给出的示例。

import org.apache.hadoop.io.ArrayWritable;
import org.apache.hadoop.io.IntWritable;

public class IntArrayWritable extends ArrayWritable {
    public IntArrayWritable() {
        super(IntWritable.class);
    }
}

我实际上检查了Hadoop的源代码,这对我来说毫无意义。
ArrayWritable不应序列化类名称,并且无法IntWritable使用6/7十六进制值序列化100个数组。该应用程序实际上似乎运行良好,而reducer反序列化了正确的值…发生了什么事?我想念什么?


问题答案:

问题在于,您从MapReduce作业中获得的输出不是该数据的序列化版本。它被翻译成漂亮的打印字符串。

当您将化简器的数量设置为零时,映射器现在将通过输出格式进行传递,该输出格式将格式化您的数据,可能会将其转换为可读的字符串。
它不会像序列化器将要转储的那样将其转储出去。



 类似资料:
  • 问题内容: 我有一个定义以下类型的架构: 这样就创建了一个对象,如下所示: 现在,我尝试将另一个生成的JAXB对象添加到该有效负载中,如下所示: 但是我遇到了一个可怕的异常,看起来它将永远无法工作,所以我决定先将有效负载对象序列化为XML,然后将其作为字符串添加到有效负载中。 而且这会爆炸,并说“ java.lang.String”不包含@XmlRootElement。 那么xs:any的使用将如

  • 问题内容: 谁能告诉我Java中对序列化的需求是什么,并给我一个示例场景来说明需求?(我已经知道什么是序列化,我只想了解何时使用它)。 问题答案: 通常在需要通过网络发送数据或存储在文件中时使用序列化。数据是对象,而不是文本。 现在的问题是您的网络基础结构和硬盘是可以理解位和字节但不能理解JAVA对象的硬件组件。 序列化是将Java对象的值/状态转换为字节,以便通过网络发送或保存它。 这类似于通过

  • 我有一个字段,它通过类序列化为ISO-8601格式。 当我收到以下JSON时, 通过将jackson-datatype-jsr310模块包含到项目中,并使用和解决了这个问题。

  • 本文向大家介绍C#使用Json.Net进行序列化和反序列化及定制化,包括了C#使用Json.Net进行序列化和反序列化及定制化的使用技巧和注意事项,需要的朋友参考一下 序列化(Serialize)是将对象转换成字节流,并将其用于存储或传输的过程,主要用途是保存对象的状态,以便在需要时重新创建该对象;反序列化(Deserialize)则是将上面的字节流转换为相应对象的过程;在.Net阵营中,Json

  • 这个问题以前的标题是“Spring5 Reactive WebClient消费HAL+JSON HATEOAS PagedResources”,但新的标题更合适。 下面的代码与RestTemplate完全兼容(参数化类型是从Spring DataREST提供的HateoAs/Hal PagedResource返回的): 上面调用服务方法的控制器代码是: 使用curl的结果是: 经过大量研究后,上面

  • 来自REST服务的json对象 使用JacksonInFiveMinutes中的代码 ObjectMapper mapper=new ObjectMapper(); Map userData=mapper.read值(webResource.queryParams(queryParams). get(String.class);, Map.class); 在哪里: 从REST服务返回json 从J