map端 join算法实现

简介: map端 join算法实现

1、原理阐述

适用于关联表中有小表的情形;

可以将小表分发到所有的map节点,这样,map节点就可以在本地对自己所读到的大表数据进行join并输出最终结果,可以大大提高join操作的并发度,加快处理速度


2、实现示例

–先在mapper类中预先定义好小表,进行join

–引入实际场景中的解决方案:一次加载数据库或者用


第一步:定义mapJoin

public class Map extends Mapper<LongWritable, Text,Text,Text> {
    HashMap<String, String> map = new HashMap<>();
    String line="";
    @Override
    protected void setup(Context context) throws IOException, InterruptedException {
        URI[] cacheFiles = DistributedCache.getCacheFiles(context.getConfiguration());
        FileSystem fileSystem = FileSystem.get(cacheFiles[0], context.getConfiguration());
        FSDataInputStream open = fileSystem.open(new Path(cacheFiles[0]));
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(open));
        while ((line=bufferedReader.readLine())!=null){
            String[] split = line.split(",");
            map.put(split[0],split[1]+" "+split[2]+"  "+split[3]);
        }
        bufferedReader.close();
        fileSystem.close();
    }
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        String[] split = value.toString().split(",");
        String s = map.get(split[2]);
        context.write(new Text(split[2]),new Text(s+" "+split[0]+"  "+split[1]+"  "+split[3]));
    }
}

第二步:定义程序运行main方法

public class Driver {
    public static void main(String[] args)throws Exception {
        Configuration configuration = new Configuration();
        //注意,这里的缓存文件的添加,只能将缓存文件放到hdfs文件系统当中
        DistributedCache.addCacheFile(new URI("hdfs:// IP :8020/目录"),configuration);
        Job job = Job.getInstance(configuration, "方法名");
        job.setJarByClass(Driver.class);
        job.setMapperClass(Map.class);
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(Text.class);
        FileInputFormat.addInputPath(job,new Path("加载路径"));
        FileOutputFormat.setOutputPath(job,new Path("写入路径"));
        boolean b = job.waitForCompletion(true);
        System.exit(b?0:1);
    }
}


相关文章
|
8月前
|
搜索推荐
妙笔生词智能作词软件是否可以根据描述故事内容写歌词?
妙笔生词软件是智能作词工具,能依据输入的歌词描述生成原创歌词。每个人的输出结果都独一无二,可按故事、意境、风格、时代和语言定制。提供丰富创作选项,详尽描述可获得更符合需求的歌词。配合图示,展示简洁易用的界面,助你流畅创作。
|
8月前
|
SQL DataWorks 安全
DataWorks产品使用合集之如何进行月度调度并补数据
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
207 7
|
存储 机器学习/深度学习 JSON
如何使用 PAI-EAS 部署 API 服务|学习笔记
快速学习如何使用 PAI-EAS 部署 API 服务。
518 0
如何使用 PAI-EAS 部署 API 服务|学习笔记
|
9月前
|
运维 DataWorks 监控
DataWorks常见问题之如何批量补数据
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
217 1
|
9月前
|
SQL DataWorks NoSQL
DataWorks常见问题之如何自定义日期参数
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
276 0
|
关系型数据库 数据库 SQL
PostgreSQL Logical Replication
限制及特性 1、只支持普通表生效,不支持序列、视图、物化视图、外部表、分区表和大对象 2、只支持普通表的DML(INSERT、UPDATE、DELETE)操作,不支持truncate、DDL操作 3、需要同步的表必须设置REPLICA IDENTITY 不能为noting(默认值是default).
8807 0
|
存储 JSON 分布式计算
一体化大数据智能计算平台 ODPS 产品年度发布
阿里云ODPS全新升级,存储、调度、元数据一体化融合 ,从 Processing 升级为 Platform,即 Open Data Platform and Service。本次峰会,同步发布了新的产品能力,即MaxCompute 引擎新功能发布及Hologres 引擎新功能发布。
一体化大数据智能计算平台 ODPS 产品年度发布
|
分布式计算 MaxCompute
MaxCompute优化系列-如何使用`MAPJOIN` ?
MAPJOIN 当一个大表和一个或多个小表做JOIN时,最好使用MAPJOIN,性能比普通的JOIN要快很多。 另外,MAPJOIN 还能解决数据倾斜的问题。 MAPJOIN的基本原理是:在小数据量情况下,SQL会将用户指定的小表全部加载到执行JOIN操作的程序的内存中,从而加快JOIN的执行速度。
9350 0
|
数据采集 JavaScript 前端开发
深入网页分析:利用scrapy_selenium获取地图信息
网页爬虫是一种自动获取网页内容的技术,它可以用于数据采集、信息分析、网站监测等多种场景。然而,有些网页的内容并不是静态的,而是通过JavaScript动态生成的,例如图表、地图等复杂元素。这些元素往往需要用户的交互才能显示出来,或者需要等待一定时间才能加载完成。如果使用传统的爬虫技术,如requests或urllib,就无法获取到这些元素的内容,因为它们只能请求网页的源代码,而不能执行JavaScript代码。我们可以使用scrapy_selenium这个工具,它结合了scrapy和selenium两个强大的库,可以实现对动态网页的爬取。
192 0
深入网页分析:利用scrapy_selenium获取地图信息

热门文章

最新文章