首页 > 其他分享 >大数据实训第七天笔记

大数据实训第七天笔记

时间:2024-07-15 15:29:01浏览次数:12  
标签:valueOut String int void 笔记 实训 import public 第七天

打包Mapreduce代码以及自定义类型

打包wordCount类

使用maven的assembly:assumbly插件
在这里插入图片描述
会生成如下的target打包文件,选择下方的mapreduce_test-1.0-SNAPSHOT-jar-with-dependencies.jar,这是包含依赖文件的jar包,将其传入虚拟机
在这里插入图片描述

在这里插入图片描述
在启动mapreduce之前,前往yarn-site.xml中设置内存,防止内容过大导致任务失败
在这里插入图片描述
启动mapreduce

hadoop jar /opt/jar/mapreduce_test-1.0-SNAPSHOT-jar-with-dependencies.jar mapreduce.wordcount.WordCountDriver "/hdfs_api" "/output"

在这里插入图片描述


使用自定义的类型进行mapreduce计算

如要计算如下的数据,计算每个人的购物总金额,则应当自定义一个使用了writeable接口的类

1,小明,男,iphone14,5999,1
2,小华,男,飞天茅台,2338,2
3,小红,女,兰蔻小黑瓶精华,1080,1
4,小魏,未知,米家走步机,1499,1
5,小华,男,长城红酒,158,10
6,小红,女,珀莱雅面膜,79,2
7,小华,男,珠江啤酒,11,3
8,小明,男,Apple Watch 8,2999,1

UserSale.java

package mapreduce.model;

import org.apache.hadoop.io.Writable;

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

/**
 * 自定义bean类实现Hadoop的序列化和反序列化
 *
 * 1.bean类实训writable接口
 * 2.bean类必须提供空参构造方法
 * 3.重写序列化方法write()
 * 4.重写反序列化方法 反序列化的属性顺序必须和序列化顺序一致
 * 5.重写toSting方法
 */


public class UserSale implements Writable {

    //销售id
    private int saleId;

    //用户名称
    private String userName;

    //用户性别
    private String sex;

    //商品名称
    private String goodsName;

    //商品单价
    private int price;

    //购买数量
    private int saleCount;

    //购买总价
    private int totalPrice;

    //空参构造方法
    public UserSale() {
    }

    //重写toString方法
    @Override
    public String toString() {

        return " "+totalPrice;
    }

    //重写序列化方法
    @Override
    public void write(DataOutput dataOutput) throws IOException {
        dataOutput.writeInt(saleId);
        dataOutput.writeUTF(userName);
        dataOutput.writeUTF(sex);
        dataOutput.writeUTF(goodsName);
        dataOutput.writeInt(price);
        dataOutput.writeInt(saleCount);
        dataOutput.writeInt(totalPrice);
    }

    //
    @Override
    public void readFields(DataInput dataInput) throws IOException {
        this.saleId=dataInput.readInt();
        this.userName=dataInput.readUTF();
        this.sex=dataInput.readUTF();
        this.goodsName=dataInput.readUTF();
        this.price=dataInput.readInt();
        this.saleCount=dataInput.readInt();
        this.totalPrice=dataInput.readInt();
    }

    public int getSaleId() {
        return saleId;
    }

    public void setSaleId(int saleId) {
        this.saleId = saleId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getGoodsName() {
        return goodsName;
    }

    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }

    public int getPrice() {
        return price;
    }

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

    public int getSaleCount() {
        return saleCount;
    }

    public void setSaleCount(int saleCount) {
        this.saleCount = saleCount;
    }

    public int getTotalPrice() {
        return totalPrice;
    }

    public void setTotalPrice(int totalPrice) {
        this.totalPrice = totalPrice;
    }
    public void setTotalPrice() {
        this.totalPrice = this.price * this.saleCount;
    }
}

UserSaleMapper.java

package mapreduce.UserSale;

import mapreduce.model.UserSale;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

public class UserSaleMapper extends Mapper<LongWritable, Text, Text, UserSale> {
    //创建输出value对象
    private UserSale valueOut = new UserSale();

    //创建输出key对象
    private Text keyOut = new Text();
    @Override
    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, UserSale>.Context context) throws IOException, InterruptedException {
        //获取一行数据
        String line = value.toString();

        //根据分隔符拆分数据
        String[] saleDetails = line.split(",");

        //封装对象
        valueOut.setSaleId(Integer.parseInt(saleDetails[0]));
        valueOut.setUserName(saleDetails[1]);
        valueOut.setSex(saleDetails[2]);
        valueOut.setGoodsName(saleDetails[3]);
        valueOut.setPrice(Integer.parseInt(saleDetails[4]));
        valueOut.setSaleCount(Integer.parseInt(saleDetails[5]));

        //计算总价
        valueOut.setTotalPrice();
        System.out.println(valueOut.toString());

        keyOut.set(saleDetails[1]);
        context.write(keyOut, valueOut);
    }
}

UserSaleReducer.java

package mapreduce.UserSale;

import mapreduce.model.UserSale;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

public class UserSaleMapper extends Mapper<LongWritable, Text, Text, UserSale> {
    //创建输出value对象
    private UserSale valueOut = new UserSale();

    //创建输出key对象
    private Text keyOut = new Text();
    @Override
    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, UserSale>.Context context) throws IOException, InterruptedException {
        //获取一行数据
        String line = value.toString();

        //根据分隔符拆分数据
        String[] saleDetails = line.split(",");

        //封装对象
        valueOut.setSaleId(Integer.parseInt(saleDetails[0]));
        valueOut.setUserName(saleDetails[1]);
        valueOut.setSex(saleDetails[2]);
        valueOut.setGoodsName(saleDetails[3]);
        valueOut.setPrice(Integer.parseInt(saleDetails[4]));
        valueOut.setSaleCount(Integer.parseInt(saleDetails[5]));

        //计算总价
        valueOut.setTotalPrice();
        System.out.println(valueOut.toString());

        keyOut.set(saleDetails[1]);
        context.write(keyOut, valueOut);
    }
}

UserSaleDriver.java

package mapreduce.model;

import org.apache.hadoop.io.Writable;

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

/**
 * 自定义bean类实现Hadoop的序列化和反序列化
 *
 * 1.bean类实训writable接口
 * 2.bean类必须提供空参构造方法
 * 3.重写序列化方法write()
 * 4.重写反序列化方法 反序列化的属性顺序必须和序列化顺序一致
 * 5.重写toSting方法
 */


public class UserSale implements Writable {

    //销售id
    private int saleId;

    //用户名称
    private String userName;

    //用户性别
    private String sex;

    //商品名称
    private String goodsName;

    //商品单价
    private int price;

    //购买数量
    private int saleCount;

    //购买总价
    private int totalPrice;

    //空参构造方法
    public UserSale() {
    }

    //重写toString方法
    @Override
    public String toString() {

        return " "+totalPrice;
    }

    //重写序列化方法
    @Override
    public void write(DataOutput dataOutput) throws IOException {
        dataOutput.writeInt(saleId);
        dataOutput.writeUTF(userName);
        dataOutput.writeUTF(sex);
        dataOutput.writeUTF(goodsName);
        dataOutput.writeInt(price);
        dataOutput.writeInt(saleCount);
        dataOutput.writeInt(totalPrice);
    }

    //
    @Override
    public void readFields(DataInput dataInput) throws IOException {
        this.saleId=dataInput.readInt();
        this.userName=dataInput.readUTF();
        this.sex=dataInput.readUTF();
        this.goodsName=dataInput.readUTF();
        this.price=dataInput.readInt();
        this.saleCount=dataInput.readInt();
        this.totalPrice=dataInput.readInt();
    }

    public int getSaleId() {
        return saleId;
    }

    public void setSaleId(int saleId) {
        this.saleId = saleId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getGoodsName() {
        return goodsName;
    }

    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }

    public int getPrice() {
        return price;
    }

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

    public int getSaleCount() {
        return saleCount;
    }

    public void setSaleCount(int saleCount) {
        this.saleCount = saleCount;
    }

    public int getTotalPrice() {
        return totalPrice;
    }

    public void setTotalPrice(int totalPrice) {
        this.totalPrice = totalPrice;
    }
    public void setTotalPrice() {
        this.totalPrice = this.price * this.saleCount;
    }
}

使用如上的方式导入jar包运行
在这里插入图片描述
计算成功
在这里插入图片描述

标签:valueOut,String,int,void,笔记,实训,import,public,第七天
From: https://blog.csdn.net/jungle_guy/article/details/139976220

相关文章

  • 2024年职业院校大数据实验室建设及大数据实训平台整体解决方案
    随着大数据技术的飞速发展,职业院校的大数据实验室建设与实训平台的打造成为教育领域关注的焦点。为了培养适应时代需求的专业人才,2024年的职业院校大数据实验室建设将遵循以下原则与策略:首要任务是明确实验室建设的学科定位,结合学校特色与行业优势,制定人才培养目标。这要求我......
  • 2024年中职人工智能实验室建设及人工智能实训平台整体解决方案
    随着人工智能技术的日益成熟与广泛应用,中等职业教育在培养未来技能型人才方面扮演着越来越重要的角色。为了响应时代需求,提升中职学生在人工智能领域的专业素养与实践能力,特制定《2024年中职人工智能实验室建设及人工智能实训平台整体解决方案》。1、中职人工智能实验室的建设......
  • leetcode刷题笔记
    11妙用数据结构11.2数组448找到所有数组中消失的数字//方法1//1.使用一个数组的下标记录每个对应数字出现的次数//2.遍历数组,根据值为0的元素所在的下标确定没有出现过的数字std::vector<int>findDisappearedNumbers(std::vector<int>&nums){std::vector<in......
  • NPA论文阅读笔记
    NPA:NeuralNewsRecommendationwithPersonalizedAttention论文阅读笔记这个又是一篇很老但是很经典的论文,这里来读一下Abstract现存的问题:​ 不同的用户通常有不同的兴趣爱好,同一用户也可能有不同的兴趣爱好。因此,不同的用户点击同一篇新闻时可能会关注不同的方面。提出......
  • 硬件开发笔记(二十六):AD21导入电感原理图库、封装库和3D模型
    前言  电阻,电容,电感还有各种基础的电子元器件、连接器和IC构成了各种实现功能的电子电路。  本篇介绍电感,并将贴片电感封装导入AD21,预览其三维模型。 贴片电感  贴片电感作为电子元件中的重要一员,因其小型化、高品质、高能量储存和低电阻等特性,在电子线路中发挥......
  • 大数据之路 读书笔记 Day5 数据同步遇到的问题与解决方案
    回顾Day4数据同步Day3无线客户端的日志采集1.分库分表的处理分库分表(Sharding)是数据库水平扩展的一种策略,当单个数据库的性能和存储能力无法满足应用需求时,可以采用分库分表来分散数据和查询负载。它通常包括两个方面:分库(DatabaseSharding)和分表(TablePartitio......
  • 大数据之路 读书笔记 Day6 离线数据开发之数据开发平台
    回顾Day5数据同步遇到的问题与解决方案Day4数据同步1.统一计算平台1.1MaxCompute概述MaxCompute(原名ODPS,OpenDataProcessingService)是阿里云提供的一种快速、完全托管的EB级数据仓库解决方案。它为用户提供了海量数据存储和实时计算的能力,适用于离线数据处理......
  • 第七天学习笔记(经验测试,白盒测试)
    经验测试法错误推测法基于经验的测试技术之错误推测法错误推测法也叫错误猜测法,就是根据经验猜想,已有的缺陷,测试经验和失败数据等可能有什么问题并依此设计测试用例.异常分析法基于经验的测试技术之异常分析法系统异常分析法就是针对系统有可能存在的异常操作、软硬件缺陷......
  • 动态图连通性笔记
    首先离线的话有几种方法:线段树分治动态维护最大生成树:边的权值为他的(下一次)删除时间,加边正常做,询问时问路径最小值是否小于当前时刻.动态图连通性Holm-deLichtenberg-Thorup(HLT)暴力:维护生成森林,若删树边则暴力找另一条边能替代这条树边.思想:给每条边赋一个“不重......
  • 学习笔记-estimator
    基于tensorflow1.15importtensorflowastf#创建一个分类特征列,使用词汇表列表categorical_column=tf.feature_column.categorical_column_with_vocabulary_list(key="your_feature_name",#这应该是你的数据中特征的键名vocabulary_list=["value1","value2......