《数据算法Hadoop/Spark》读书笔记4--topN

Spark核心RDD:combineByKey函数详解 为什么单独讲解combineByKey? 因为combineByKey是Spark中一个比较核心的高级函数,其他一些高阶键值对函数底层都是用 groupByKey实现的。诸如 groupByKey,reduceByKey等等 如下给出combineByKey的定义,其他的细节暂时忽略(1.6.0版本期函数名更新为combineByKeyWithClassTag) def combineByK 阅读详情

本章待完善。
有问题待解答。

broadcast()共享全局变量,实验证明,无论是本地还是集群模式,全局变量也是可以的,为什么还要广播呢?


broadcast()

本测试提交脚本
cd $SPARK_HOME
#top10
./bin/spark-submit --class cn.whbing.spark.dataalgorithms.chap02.TopN --master spark://master-1a:7077 /home/whbing/algorithms/dataalgorithms-0.0.1-SNAPSHOT.jar  hdfs:///whbing/algorithms/chap02-top10.txt
package cn.whbing.spark.dataalgorithms.chap02;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.SortedMap;
import java.util.TreeMap;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import org.apache.spark.api.java.function.VoidFunction;

import com.google.common.collect.Lists;

import cn.whbing.spark.dataalgorithms.chap01.util.TupleComparator;
import scala.Tuple2;
import scala.collection.generic.BitOperations.Int;

/**
 * 
 * @author whbing
 * 
 * 在local模式下,全局变量不用广播可以识别。
 * 测试在集群模式下是否可以识别。结果表明也是可以识别。
 * 
 * 为何还要用广播变量呢?
 * 
 * 本测试提交脚本
 *    cd $SPARK_HOME
      #top10
      ./bin/spark-submit --class cn.whbing.spark.dataalgorithms.chap02.TopN --master spark://mast
    er-1a:7077 /home/whbing/algorithms/dataalgorithms-0.0.1-SNAPSHOT.jar hdfs:///whbing/algorit
    hms/chap02-top10.txt
 * 
 */

public class TopN {

    //所谓的全局变量,在分布式编程中直接使用会失效?实验证明并没有
    final public static int topN = 6;
    public static void main(String[] args) {

        //读取参数并验证
        if(args.length<1){
            System.err.println("Usage: SecondarySort <file>");
            System.exit(1);  //1表示非正常退出,0表示正常退出
        }

        //读取输入的参数,即输入文件
        String inputPath = args[0];
        System.out.println("args[0]:<file>="+args[0]);

        SparkConf conf = new SparkConf().setAppName("SecondarySort by spark");
        JavaSparkContext sc = new JavaSparkContext(conf);

        //读取每一行即<cat_id><,><weight>
        //JavaRDD<String> lines = sc.textFile("chap02-top10.txt",2);
        JavaRDD<String> lines = sc.textFile(inputPath,2);


        //转化成键值对形式-->  <catId,weight>
        JavaPairRDD<String, Integer> pairs = 
                lines.mapToPair(new PairFunction<String,String,Integer>() {

                    @Override
                    public Tuple2<String, Integer> call(String s) throws Exception {
                        //对输入s进行转换
                        String[] tokens = s.split(",");//s即cat1,2 以逗号分割
                        String catId = tokens[0];
                        Integer weight = new Integer(tokens[1]);
                        return new Tuple2<String,Integer>(catId,weight);
                    }
                }); 

        /*
         * 思路:将RDD以weight为key放入TreeMap中(默认升序),只留后10个即可
         */
        // create a local top-10
        JavaRDD<TreeMap<Integer, String>> partitions = pairs.mapPartitions(
             new FlatMapFunction<Iterator<Tuple2<String,Integer>>, TreeMap<Integer, String>>() {
             @Override
             public Iterator<TreeMap<Integer, String>> call(Iterator<Tuple2<String,Integer>> iter) {
                 TreeMap<Integer, String> top10 = new TreeMap<Integer, String>();
                 while (iter.hasNext()) {
                    Tuple2<String,Integer> tuple = iter.next();
                    top10.put(tuple._2, tuple._1);
                    // keep only top N 
                    if (top10.size() > topN) {
                       top10.remove(top10.firstKey());
                    }  
                 }
                 //以下两种均可,map转iterator
                 //return Collections.singletonList(top10).iterator();
                 return Lists.newArrayList(top10).iterator();
             }
        });

        //汇总reduce到集合
        //用于保存最终top10
        TreeMap<Integer,String> finalTop10_2 = new TreeMap<Integer,String>();
        partitions.reduce(new Function2<
                TreeMap<Integer,String>, 
                TreeMap<Integer,String>, 
                TreeMap<Integer,String>>() {

            @Override
            public TreeMap<Integer, String> call(TreeMap<Integer, String> m1, TreeMap<Integer, String> m2) throws Exception {
                //m1,partitionK-1
                for(Map.Entry<Integer, String> entry:m1.entrySet()){
                    finalTop10_2.put(entry.getKey(), entry.getValue());
                    if(finalTop10_2.size()>topN){
                        finalTop10_2.remove(finalTop10_2.firstKey());
                    }
                }
                //m2,partitionK
                for(Map.Entry<Integer, String> entry:m2.entrySet()){
                    finalTop10_2.put(entry.getKey(), entry.getValue());
                    if(finalTop10_2.size()>topN){
                        finalTop10_2.remove(finalTop10_2.firstKey());
                    }
                }
                return finalTop10_2;
            }
        });
        //方案2验证finalTop10,打印finalTop10_2集合即可
        System.out.println("====汇总方案2,reduce到集合方法,finalTop10_2结果:====");
        for(Integer key:finalTop10_2.keySet()){
            System.out.println(key+" -> "+finalTop10_2.get(key));
        }

    }
}

实验证明运行正常。

数据算法--Hadoop/Spark大数据处理技巧 data algorithms部分主题自写scala程序实现 SecondarySort (chapter 1) data 2015,1,1,10 2015,1,2,11 2015,1,3,12 2015,1,4,13 2015,2,1,22 2015,2,2,23 2015,2,3,24 2015,2,4,25 2015,3,1,20 2015,3,2,21 2015,3,3,22 2015... 阅读详情

相关推荐

数据算法 Hadoop Spark大数据处理技巧

百度云下载链接

【人工智能数据科学与数据处理】——深入详解数据库与大数据技术之大数据处理框架:Hadoop与Spark

深入详解人工智能数据科学与数据处理中数据库与大数据技术——大数据处理框架:Hadoop与Spark

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 2005

数据算法 Hadoop Spark大数据处理技巧(1/3)

中文版,一共3卷,第1卷。了解spark技术内幕 了解spark技术内幕

《数据算法Hadoop/Spark》读书笔记3--Top10

1 说明 本章知识 1 唯一key单分区和多分区测试 2 分区汇总 :最终top10 2.1 汇总方案1:collect到集合 2.1 汇总方案2:reduce到集合 若返回要求为JavaPairRDD&lt;K,V&gt;,Tuple2&lt;K,V&gt;即可 1 说明 本实验测试spark实现top10。 思路:先对数据进行mapPartitions...

王小禾 456

数据算法 Hadoop Spark大数据处理技巧 中文PDF

《数据算法:Hadoop/Spark大数据处理技巧》介绍了很多基本设计模式、优化技术和数据挖掘及机器学习解决方案,以解决生物信息学、基因组学、统计和社交网络分析等领域的很多问题。这还概要介绍了MapReduce、Hadoop和Spark。

数据算法:Hadoop+Spark大数据 中文版

数据算法:Hadoop+Spark大数据 中文版 高清版 良心资源

《数据算法 hadoop spark大数据处理技巧》笔记 前言

MapReduce:是一个软件框架,采用并行、分布式方式处理大数据集,目标是实现可伸缩性,重点是编写两个函数:map和reduce map():过滤和聚集数据。主节点得到数据,将数据分成小块,分布到若干从节点处理。从节点对每个数据块应用同样的转换函数,将结果传回主节点 reduce():根据map()生成的键完成归约、分组、总结。主节点根据唯一的键-值对将接收到的结果进行洗牌、聚集,传回从节点...

kdb_viewer的博客 645

TCMSP数据库+R语言实战:从网页爬虫到中药-靶点网络图的全流程解析

本文详细解析了如何使用R语言从TCMSP数据库抓取中药-靶点数据,并通过数据清洗、网络分析和可视化构建完整的中药作用机制研究流程。涵盖动态网页爬虫、ADME参数筛选、网络图构建及高级可视化技巧,为中医药现代化研究提供实用的生物信息学方法。

weixin_31304817的博客 336

《数据算法-Hadoop/Spark大数据处理技巧》读书笔记(二)——TopN列表

大数据计算力经常要面对TopN的问题,也就是一个大集合里取排序后的前N个数据。 1.Key值唯一 ①MapReduce: 在Map中使用SortedMap完成每个节点的TopN操作,然后所有节点将数据汇聚到Reduce节点,再次使用SortedMap完成TopN操作,其中setup()中做初始化工作,map()中构造SortedMap,在cleanup()中将生成的SortedMap输出给r

狂暴棕熊的博客 648

用LangFuse+LangChain打造可观测的AI应用:从埋点到成本监控实战

本文详细介绍了如何将开源可观测性平台LangFuse深度集成到基于LangChain构建的AI应用中,特别是电商客服机器人场景。通过从基础SDK集成、提示词管理到成本监控的完整实战,帮助开发者实现对LLM应用内部工作流的清晰追踪、问题排查与费用分析,从而打造稳定、可控的生产级AI应用。

dapp9builder的博客 709

RT-Thread Studio使用笔记(四):带片外Flash(W25Q128)的OTA(YModem)

前言 在学习OTA之前,请先参考上两篇博客写的关于SPI设备及W25Q128的使用方法,传送门: https://blog.youkuaiyun.com/tigerots/article/details/107423633 https://blog.youkuaiyun.com/tigerots/article/details/107933991 如何使用OTA 一. 制作BootLoader 打开Bootloader 在线获取地址,注册,并根据RT-thread官方文档生成BootLoader,官方文档已经写的很清楚,再此

tigerots的专栏 4007

数据算法第三章中的问题你面试和工作中遇到过吗?

昨天我写了一篇文章《年轻人你渴望力量吗 | 我读过的一些书推荐》,其中推荐了一本书《数据算法》,这是其中的一个章节,恰巧前几天我在和一个读者交流的过程中,这个题目在他面试字节跳动的时候有...

微信搜:import_bigdata,大数据领域硬核原创作者 369

通达信量化打板选股指标公式源码副图

X_2:=3*LOW;X_13:=4;X_14:=3;X_15:=2;X_16:=1;

gpzb7的博客 4481

《数据算法-Hadoop/Spark大数据处理技巧》读书笔记(四)——移动平均

移动平均:对时序序列按周期取其值的平均值,这种运算被称为移动平均。典型例子是求股票的n天内的平均值。 移动平均的关键是如何求这个平均值,可以使用Queue来实现。 public class MovingAverageDriver { public static void main(String[] args){ SparkConf conf = new SparkC

狂暴棕熊的博客 1832

当vCenter的证书过期、Root密码过期、Root密码遗忘同时发生时的解决方法与步骤

vCenter,强制修改root密码,修改SSO User密码,修复证书过期问题

OCTSJimmy的专栏 5546

微信小程序 - 最新实现项目适老化设计全流程及源码,老年模式大字版与常规版页面样式切换,老年人大字模式字体与布局更换关怀版解决方案(新老项目均适用的方案,全局页面统一修改文本字号/DOM排版元素等)

微信小程序,vue2,vue3,老年大字版设计,小程序开发如何实现适老化方案,放大字体字号及改变页面的布局,小程序关怀模式实现思路及代码,统一将布局都改了,全局修改字体大小适配老年人看不清问题,小程序怎么接入老年模式并根据模式改变页面的UI设计,实现全局修改字体大小适老化/关怀版改造,最新详细示例代码全流程,字体放大/缩小,老项目怎么适配老年人模式方案,小程序适老化设计指南,当切换成老年模式时页面所有排版都会发生变化,小程序vue开发,新手详细教程,老年模式字体设置思路和UI布局的设计,开发者可以通过wx.

🏆 前端领域优质创作者 7305

《数据算法Hadoop/Spark》读书笔记1--二次排序

1 说明 本章知识 1.1 Chapter 01: Secondary Sorting With Spark 1.1.1 新建maven工程 1.1.2 编辑输入文件 1.1.3 二次排序 1.1.4 运行结果 1.1.5 小结 1 说明 本文档介绍Spark的二次排序解决方案。 本章知识 方法 返回类型/描述 textFile ...

王小禾 645

电磁场仿真软件:CST Studio Suite_(25).案例分析与实践

在电磁场仿真中,材料属性的设置至关重要。通过API,您可以轻松地设置和修改材料属性,以适应不同的仿真需求。通过以上案例分析和实践,您已经学会了如何在CST Studio Suite中进行二次开发。自动化仿真流程:批量创建和运行仿真项目、优化设计参数、生成报告。自定义仿真设置:设置材料属性、边界条件和激励源。数据处理与分析:读取仿真结果、数据可视化和数据导出。高级脚本开发:多线程仿真、集成机器学习和云仿真。这些技能将帮助您更高效地进行电磁场仿真,提高设计质量和工作效率。

kkchenjj的博客 1383

《数据算法-Hadoop/Spark大数据处理技巧》读书笔记(一)——二次排序

写在前面: 在做直播的时候有同学问Spark不是用Scala语言作为开发语言么,的确是的,从网上查资料的话也会看到大把大把的用Scala编写的Spark程序,但是仔细看就会发现这些用Scala写的文章绝大部分是初级内容,最常见的就是某一个API是怎么用的,很多都是拷贝粘贴的重复内容,真正深入的内容并不多见。之前看美团团队写的Spark优化相关放出的代码是用Java写的,《数据算法-Hadoop/

狂暴棕熊的博客 2596

数字 IC 笔试面试必考点(2)FPGA 开发流程

FPGA 的详细开发流程就是利用 EDA 开发工具对 FPGA 芯片进行开发的过程,所以 FPGA 芯片开发流程讲的并不是芯片的制造流程,区分于 IC 设计制造流程哟(芯片制造流程多麻烦,要好几十亿的费用呢,而且国内也貌似没有哪家像样的 Foundry 厂,除了台湾的 TSMC 在世界有立足之地,Fabless 的 IC 设计公司倒是挺强的如 Hisilicon,这也是它为什么会被 USA 针对的原因)。

新芯设计的博客 2011

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Hadoop TOPN 实现

业务场景:大数据的挖掘的形式多种多样,即便是最基本的数据大处理技术,也应该关注全部数据而不是局部或者部分,以TOPN(排序取顶部N项目数据)为例,对全批量数据进行统计技术并筛选目标数据. 数据格式:          VERSION=1.0,PASSTIME=2016-11-3000:00:39 000,CARSTATE=1,CARPLATE=无,PLATETYPE=99,SPEED=0,PL

it小奋 2588

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

数据算法-hadoop3 TopN

mapreduce topN

jshazhang的专栏 538

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

mapreduce topN算法 和排序

排序:https://blog.youkuaiyun.com/yangjjuan/article/details/78063279 topN:https://blog.youkuaiyun.com/smallpizza/article/details/77950723 http://cloud.51cto.com/art/201411/456786.htm https://blog.51cto.com/xpl...

囡囡的博客 886

spark RDD中的partition和hdfs中的block的关系

hdfs是一款非常优秀的分布式文件系统。hdfs为主从架构,主节点为NameNode,主节点负责配合journalNode等完成fsimge完整性。从节点为DataNode,从节点负责存储数据。节点之间通信。。。好吧跑题了! hdfs文件是分布式存储,每个文件根据配置被切分成block(hadoop2.x默认128M)。为了达到容错的目的,根据配置每个block块...

u010990043的博客 5968

使用Hadoop和Spark实现TopN算法(1)——唯一键

0.简介   TopN算法是一个经典的算法,由于每个map都只是实现了本地的TopN算法,而假设map有M个,在归约的阶段只有M x N个,这个结果是可以接受的并不会造成性能瓶颈。   这个TopN算法在map阶段将使用TreeMap来实现排序,以到达可伸缩的目的。   当然算法有两种,一种是唯一键,就是说key的类型是唯一的(是指在比较的实际阶段),比如本篇就是唯一键的TopN

ReyzeLamp的博客 944

1.大数据工具简单分析天猫年底月销量

1.引言 在线上交易早已成熟的今天,电商交易量究竟有多少?为了清晰地比较天猫月销量,本文爬取了天猫2017年底、2018年初主流分类商品大量数据,并做了简单的数据统计。整体流程如下: 说明:利用scrapy爬取天猫店铺数据约50万条,导入HDFS分布式存储,利用大数据组件spark操作算子分析及sparkSQL查询分析得出处理结果,最后,EChart前端组件将结果以图表形式展现出来。

王小禾 5778
上一篇: 《数据算法Hadoop/Spark》读书笔记3--Top10
下一篇: libsvm源码解析
王小禾
博客等级 码龄11年 80粉丝 291原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值