hadoop序列化无法正常输出问题

在测试Hadoop代码时遇到问题,输出数据始终异常为0。经调试发现,序列化和反序列化过程中不应重新定义变量,确保反序列化顺序与序列化一致,以保证数据正常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package demo.Order;

import org.apache.hadoop.io.WritableComparable;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;

public class OrderBean implements WritableComparable<OrderBean> {
    private int order_id;
    private double price;

    public OrderBean() {
    }

    public OrderBean(int order_id, double price) {
        this.order_id = order_id;
        this.price = price;
    }

    public int getOrder_id() {
        return order_id;
    }

    public void setOrder_id(int order_id) {
        this.order_id = order_id;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public void write(DataOutput out) throws IOException {
         out.writeInt(order_id);
         out.writeDouble(price);
    }

    @Override
    public void readFields(DataInput in) throws IOException {
        int order_id = in.readInt();
        double price = in.readDouble();
    }

    @Override
    public String toString() {
        return  order_id +"\t" + price;
    }

    @Override
    public int compareTo(OrderBean o) {

        int result;

        if (order_id > o.getOrder_id()) {
            result = 1;
        } else if (order_id < o.getOrder_id()) {
            result = -1;
        } else {
            // 价格倒序排序
            result = price > o.getPrice() ? -1 : 1;
        }

        return result;
    }}

今天,在测试上面代码的时候,输出到目标文件的数据一直是0 ,0
没有一个正常的数据,结果多次调试对比,发现是序列化的发序列化是不能重新定义变量,
只需要将

 @Override
    public void readFields(DataInput in) throws IOException {
        int order_id = in.readInt();
        double price = in.readDouble();
    }
里面改成
 @Override
    public void readFields(DataInput in) throws IOException {
        order_id = in.readInt();
        price = in.readDouble();

最后,切记,反序列化顺序和序列化一样,并且不能自己重新定义变量!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值