精华内容
下载资源
问答
  • OpenSuperMaps 什么 OSMAnd Map文件每月分发一次,并添加了数...选项1: 将文件从下载到OSMAND数据文件夹,它将自动加载。 选项2: 将文件从下载到手机并打开。 OSMAND将文件复制到其数据文件夹并加载它。 这会
  • 由于数据采集一个持续时间长,频率高操作,对于频繁对文件进行读写操作非常消耗系统资源,对于采集多个文件也不好管理,如果删除某个点数据,在整个文件中进行检索将非常痛苦,最要命的是,File文件...
  • 使用出现疑难问题

    2021-01-07 12:47:58
    因为在main.js引入amap组件全局,所有用不到这个组件页面访问时也会加载。所以现在想只在使用地图界面引入amap组件。比如station.js完整内容如下: <pre><code> import Vue from 'vue&#...
  • 图片三级缓存机制

    2018-12-26 10:47:31
    一级: 内存中的缓存图片对象(Bitmap), 用Map&lt;url, Bitmap&gt; 二级: 手机sd卡的files或手机内部的files中缓存图片文件(xxx.jpg/png) 三级: 服务器端保存图片文件 二、如何使用三级缓存? 如何根据url...

    一、什么是三级缓存?

    1. 一级: 内存中的缓存图片对象(Bitmap), 用Map<url, Bitmap>
    2. 二级: 手机sd卡的files或手机内部的files中缓存图片文件(xxx.jpg/png)
    3. 三级: 服务器端保存图片文件

    二、如何使用三级缓存?

    如何根据url根据图片显示?

     

    1. 根据url从一级缓存中取出对应的Bitmap对象,
    • . 如果有, 直接显示
    • . 如果没有进入进入步骤2
    1. 根据url从二级缓存中得到Bitmap对象(从url中取出文件名到files文件夹下加载图片文件),
    • . 如果有, 直接显示, 并保存到一级缓存
    • . 如果没有进入③
    1. 根据Url请求服务(三缓存)获取Bitmap对象, 需要启动分线程请求, 显示代表正在加载的图片
    1. . 如果有

    显示图片

    保存到一级缓存

    保存二缓存

    1. . 如果没有:
       显示代表错误的图片

    三、在ListView中使用图片三级缓存的问题?

    1. 问题: 快速滑动时item中图片有闪动(显示错误图片)
    2. 原因: connvertView被复用了
    3. 解决: 检查视图是否已经被复用, 如果复用了不加载图片/不显示图片
    • 如何检查?

    a. 每次getView()中都会将当前的imagPath保存到ImageView(tag)

    b. 判断前面传入的imagePath和ImageView中保存的ImagePah是否相同

    • 在哪检查?

    a. 在分线程准备请求服务器之前

    b. 在主线程准备显示图片之前

     

     

    本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源

    展开全文
  • PushConfig.plist 文件中的字段都是什么意思? Appkey:应用标识。 Channel:渠道标识。 IsProduction:是否生产环境。 IsIDFA:是否使用 IDFA 启动 SDK。 刚集成完插件收不到推送怎么办? 请首先按照正确方式...
  • 7.6 取得手机内置媒体中的图片文件 7.7 相片导航向导与设置背景桌面 7.8 调整音量大小 7.9 播放mp3资源文件 7.10 播放存储卡里的mp3音乐 7.11 自制录音/播放录音程序 7.12 通过收到短信开始秘密录音 7.13 内置影片...
  • 7.6 取得手机内置媒体中的图片文件 7.7 相片导航向导与设置背景桌面 7.8 调整音量大小 7.9 播放mp3资源文件 7.10 播放存储卡里的mp3音乐 7.11 自制录音/播放录音程序 7.12 通过收到短信开始秘密录音 7.13 内置影片...
  • 7.6 取得手机内置媒体中的图片文件 7.7 相片导航向导与设置背景桌面 7.8 调整音量大小 7.9 播放mp3资源文件 7.10 播放存储卡里的mp3音乐 7.11 自制录音/播放录音程序 7.12 通过收到短信开始秘密录音 7.13 内置影片...
  • 7.6 取得手机内置媒体中的图片文件 7.7 相片导航向导与设置背景桌面 7.8 调整音量大小 7.9 播放mp3资源文件 7.10 播放存储卡里的mp3音乐 7.11 自制录音/播放录音程序 7.12 通过收到短信开始秘密录音 7.13 内置影片...
  • 7.6 取得手机内置媒体中的图片文件 7.7 相片导航向导与设置背景桌面 7.8 调整音量大小 7.9 播放mp3资源文件 7.10 播放存储卡里的mp3音乐 7.11 自制录音/播放录音程序 7.12 通过收到短信开始秘密录音 7.13 内置影片...
  • 需求:统计流量且按照手机归属地,将结果数据输出到不同省份文件中 该程序和流浪统计(3)很相似,唯一不同的是在其中增加了partitioner使用 首先在介绍partitioner之前,我们先了解一下为啥要使用它? 我们...

    需求:统计流量且按照手机号的归属地,将结果数据输出到不同的省份文件中

    该程序和流浪统计(3)很相似,唯一不同的是在其中增加了partitioner 的使用 首先在介绍partitioner之前,我们先了解一下为啥要使用它?

    我们知道在执行map任务的时候,会将key/value写入内存或者磁盘。

    这个时候我们在往内存写数据的时候,会根据key创建分区。

    问题一:为什么要创建分区?

    我们如果文件很大,我们只使用一个reducer,这个reducer就要负责去所有map端取数据。那么势必会带来性能问题,而且服务器资源也没有合理利用起来

    如果要合理利用,则需要多起几个reducer,那这几个reducer去map端拉取整个文件,这样的话就有这样一个问题:相同的key可能分布在不同map机器或者map文件中,每一个reducer计算出来的结果可能有问题。

    现在我们对map的数据进行分区,然后我们就能保证相同的key都在一个分区上,然后reducer拉取数据的时候,所计算的结果是没有问题的。这样既保证的mapreduce执行的效率,又保证了数据的正确性。

    简单一句话:分区就是更好的将map任务的结果均匀分配给reducer

    问题二:怎么创建?

    分区的默认实现HashPartitioner,它根据key的hashcode和Interger.

    MAX_VALUE参与与运算然后 %指定的reducer数量。如果Reducer没有指定,那么默认就是一个,所以分区数也是一个,因为任何数%1=0,所以只有一个分区。

    这种情况情况有时候可能某些分区数据很多,有的分区数据很少,有数据倾斜的问题,所以我们有时候需要自己定义Partitioner类

    问题三 

    3.1 Reducer是如何知道取哪一台机器的哪一个分区的数据呢?

    Map任务结束就会通知MRAppMaster报告Map任务运行的状态或者输出的信息,然后Reducer启动之后,EventFetcher线程就会不断向MRAppMaster查询这些状态或者信息,并把主机和对应的URL信息封装在MapHost里。然后Fetcher线程就知道从哪一台机器通过什么URL去获取数据

    3.2如何知道取哪一个分区的数据呢?

    我们知道Reducer的EventFetcher线程会向MRAppMaster查询Map任务的状态信息,然后封装在一个MapHost中。然后Fetcher线程就会从根据主机名和URL去copy数据,在这个URL中,URL格式如下:

    url=13562/mapOutput?job=job_1488251187492_0003&reduce=0&map=attempt_1488251187492_0003_m_000001_0

    户提供一个reduce参数,这个参数的值就是和各个map节点任务的分区对应着的,所以知道从哪个分区去获取数据

    了解清楚之后,对它进行使用

    使用IDEA编写代码:定义类 分别为:FlowCount,FlowCountMapper,FlowCountReducer,ProvincePartitioner,FlowBean

      包结构:

     定义一个FlowBean对象,将上行流量和下行流量封装到对象中

    package com.lyz.bigdata.mr.provinceflow;
    
    import org.apache.hadoop.io.Writable;
    
    import java.io.DataInput;
    import java.io.DataOutput;
    import java.io.IOException;
    
    /**
     *@Author:759057893@qq.com Lyz
     *@Date: 2019/2/28 21:31
     *@Description:
     **/
    public class FlowBean implements Writable {
    
        private long upFlow;
        private long dFlow;
        private long sumFlow;
    
        public FlowBean() { }
    
        public long getUpFlow() {
            return upFlow;
        }
    
        public void setUpFlow(long upFlow) {
            this.upFlow = upFlow;
        }
    
        public long getdFlow() {
            return dFlow;
        }
    
        public void setdFlow(long dFlow) {
            this.dFlow = dFlow;
        }
    
        public long getSumFlow() {
            return sumFlow;
        }
    
        public void setSumFlow(long sumFlow) {
            this.sumFlow = sumFlow;
        }
    
        public FlowBean(long upFlow, long dFlow) {
            this.upFlow = upFlow;
            this.dFlow = dFlow;
            this.sumFlow = dFlow+upFlow;
        }
    
        @Override
        public String toString() {
    
            return  upFlow + "\t" + dFlow + "\t" + sumFlow;
        }
    
        /**
         * 序列化方法
         */
        @Override
        public void write(DataOutput out) throws IOException {
            out.writeLong(upFlow);
            out.writeLong(dFlow);
            out.writeLong(sumFlow);
    
        }
    
        /**
         * 反序列化方法
         * 注意:反序列化的顺序跟序列化的顺序完全一致
         */
        @Override
        public void readFields(DataInput in) throws IOException {
            upFlow = in.readLong();
            dFlow = in.readLong();
    
        }
    
    
    }
    

      FlowCount类

    package com.lyz.bigdata.mr.provinceflow;
    
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.LongWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Job;
    import org.apache.hadoop.mapreduce.Mapper;
    import org.apache.hadoop.mapreduce.Reducer;
    import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
    import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
    
    import java.io.IOException;
    
    /**
     *@Author:759057893@qq.com Lyz
     *@Date: 2019/2/28 21:28
     *@Description:
     **/
    public class FlowCount {
    
        static class FlowCountMapper extends Mapper<LongWritable, Text, Text, FlowBean> {
    
            @Override
            protected  void map(LongWritable key, Text value,Context context) throws IOException, InterruptedException{
                //将一行内容转成string
                String line =value.toString();
                //切分字段
                String[] fields =line.split("\t");
                //取出手机号
                String phone =fields[1];
                //取出上行流量下行流量
                long upFlow = Long.parseLong(fields[fields.length-3]);
                long dFlow = Long.parseLong(fields[fields.length-2]);
    
                context.write(new Text(phone),new FlowBean(upFlow,dFlow));
            }
    
        }
    
    
        static class FlowCountReducer extends Reducer<Text, FlowBean, Text, FlowBean>{
    
            @Override
            protected  void reduce(Text key, Iterable<FlowBean> values, Context context) throws IOException, InterruptedException{
    
                long sum_upFlow = 0;
                long sum_dFlow = 0;
    
                //遍历所有bean,将其中的上行流量,下行流量分别累加
                for(FlowBean bean :values){
                    sum_upFlow +=  bean.getUpFlow();
                    sum_dFlow  += bean.getdFlow();
                }
    
                 FlowBean resultBean    =   new FlowBean(sum_upFlow,sum_dFlow);
                context.write(key,resultBean);
    
    
            }
    
        }
    
        public static void main(String[] args) throws Exception {
    
            // 1 获取job信息
            Configuration configuration = new Configuration();
    
            Job job = Job.getInstance(configuration);
    
            // 2 获取jar包位置
            job.setJarByClass(FlowCount.class);
    
            // 3 关联自定义的mappper和reducer
            job.setMapperClass(FlowCountMapper.class);
            job.setReducerClass(FlowCountReducer.class);
    
            //指定我们自定义的数据分区器
            job.setPartitionerClass(ProvincePartitioner.class);
            //同时指定相应“分区”数量的reducetask
            job.setNumReduceTasks(5);
    
            // 4 设置map输出数据类型
            job.setMapOutputKeyClass(Text.class);
            job.setMapOutputValueClass(FlowBean.class);
    
            // 5 设置最终输出数据类型
            job.setOutputKeyClass(Text.class);
            job.setOutputValueClass(FlowBean.class);
    
    
            // 6 设置数据输入和输出文件路径
            FileInputFormat.setInputPaths(job,  new Path(args[0]));
            FileOutputFormat.setOutputPath(job,  new Path(args[1]));
    
            // 7 提交代码
            // job.submit();
            boolean result = job.waitForCompletion(true);
            System.exit(result ? 0 : 1);
        }
    
    }
    

       ProvincePartitioner类,它继承了Partitioner类

    package com.lyz.bigdata.mr.provinceflow;
    
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Partitioner;
    
    import java.util.HashMap;
    
    /**
     *@Author:759057893@qq.com Lyz
     *@Date: 2019/3/9 11:22
     *@Description:
     **/
    
    /**
     * K2  V2  对应的是map输出kv的类型
     * @author
     *
     */
    
    public class ProvincePartitioner  extends Partitioner <Text,FlowBean > {
    
        public static HashMap<String ,Integer > proviceDict = new HashMap<String ,Integer>();
    
        static{
            proviceDict.put("136",0);
            proviceDict.put("137",1);
            proviceDict.put("138",2);
            proviceDict.put("139",3);
        }
    
        @Override
        public int getPartition(Text key, FlowBean flowBean, int numPartitions) {
    
            String prefix =key.toString().substring(0,3);
            Integer provinceId =proviceDict.get(prefix);
            return  provinceId==null?4:provinceId;
        }
    }
    

       然后用IDEA进行打包 打包方式请看博主写的https://blog.csdn.net/weixin_38201936/article/details/88018493 文章

      打包成功后 首先在hdfs 中创建文件

       hadoop fs -mkdir -p  /flowsum/input 

      创建成功后在网页上查看是否创建成功

          然后创建一个文件,将需要统计的数据集粘贴进去

           vi  flow.data  数据集如下 

    1363157985066 	13726230503	00-FD-07-A4-72-B8:CMCC	120.196.100.82	i02.c.aliimg.com		24	27	2481	24681	200
    1363157995052 	13826544101	5C-0E-8B-C7-F1-E0:CMCC	120.197.40.4			4	0	264	0	200
    1363157991076 	13926435656	20-10-7A-28-CC-0A:CMCC	120.196.100.99			2	4	132	1512	200
    1363154400022 	13926251106	5C-0E-8B-8B-B1-50:CMCC	120.197.40.4			4	0	240	0	200
    1363157993044 	18211575961	94-71-AC-CD-E6-18:CMCC-EASY	120.196.100.99	iface.qiyi.com	视频网站	15	12	1527	2106	200
    1363157995074 	84138413	5C-0E-8B-8C-E8-20:7DaysInn	120.197.40.4	122.72.52.12		20	16	4116	1432	200
    1363157993055 	13560439658	C4-17-FE-BA-DE-D9:CMCC	120.196.100.99			18	15	1116	954	200
    1363157995033 	15920133257	5C-0E-8B-C7-BA-20:CMCC	120.197.40.4	sug.so.360.cn	信息安全	20	20	3156	2936	200
    1363157983019 	13719199419	68-A1-B7-03-07-B1:CMCC-EASY	120.196.100.82			4	0	240	0	200
    1363157984041 	13660577991	5C-0E-8B-92-5C-20:CMCC-EASY	120.197.40.4	s19.cnzz.com	站点统计	24	9	6960	690	200
    1363157973098 	15013685858	5C-0E-8B-C7-F7-90:CMCC	120.197.40.4	rank.ie.sogou.com	搜索引擎	28	27	3659	3538	200
    1363157986029 	15989002119	E8-99-C4-4E-93-E0:CMCC-EASY	120.196.100.99	www.umeng.com	站点统计	3	3	1938	180	200
    1363157992093 	13560439658	C4-17-FE-BA-DE-D9:CMCC	120.196.100.99			15	9	918	4938	200
    1363157986041 	13480253104	5C-0E-8B-C7-FC-80:CMCC-EASY	120.197.40.4			3	3	180	180	200
    1363157984040 	13602846565	5C-0E-8B-8B-B6-00:CMCC	120.197.40.4	2052.flash2-http.qq.com	综合门户	15	12	1938	2910	200
    1363157995093 	13922314466	00-FD-07-A2-EC-BA:CMCC	120.196.100.82	img.qfc.cn		12	12	3008	3720	200
    1363157982040 	13502468823	5C-0A-5B-6A-0B-D4:CMCC-EASY	120.196.100.99	y0.ifengimg.com	综合门户	57	102	7335	110349	200
    1363157986072 	18320173382	84-25-DB-4F-10-1A:CMCC-EASY	120.196.100.99	input.shouji.sogou.com	搜索引擎	21	18	9531	2412	200
    1363157990043 	13925057413	00-1F-64-E1-E6-9A:CMCC	120.196.100.55	t3.baidu.com	搜索引擎	69	63	11058	48243	200
    1363157988072 	13760778710	00-FD-07-A4-7B-08:CMCC	120.196.100.82			2	2	120	120	200
    1363157985066 	13726238888	00-FD-07-A4-72-B8:CMCC	120.196.100.82	i02.c.aliimg.com		24	27	2481	24681	200
    1363157993055 	13560436666	C4-17-FE-BA-DE-D9:CMCC	120.196.100.99			18	15	1116	954	200

      保存成功后 移入input 文件夹中   

      hadoop  fs  -put  flow.data   /flowsum/input

    将打包成功的jar 包移动到集群中,并运行  

    hadoop jar  provinceFlow.jar  /flowsum/input    /flowsum/provinceout   

     在这里说明一下 由于idea  打jar的时候已经将main方法打入jar包,所以已经指定了main方法  在这里就不用添加类名的指向路径
     

    上面的执行成功后 结果如下:一共分成五个区 0-3 代表电话号码是136-139,4区代表其他的号码

    上述是所有的运行结果!

    展开全文
  • 9.2.1 实现Android中的广播事件 180 9.2.2 BroadCast Receiver介绍 181 9.3 应用实例详解 181 9.3.1 程序操作演示 182 9.3.2 实例编程实现 182 9.4 本章小结 186 第10章 一切为用户服务——Service应用实例 ...
  • BlueSoleil

    2014-12-15 19:04:25
    当然也绝对没有什么5M文件大小限制,那都老黄历了。 一直在寻觅最新破解版你还在等什么,有了官方免费IVT蓝牙驱动完全版,无需注册,无需授权码,安装后直接可用。 官方提供驱动下载一个文件很小...
  •  7.6 取得手机内置媒体中的图片文件  7.7 相片导航向导与设置背景桌面  7.8 调整音量大小  7.9 播放mp3资源文件  7.10 播放存储卡里的mp3音乐  7.11 自制录音/播放录音程序  7.12 通过收到短信开始秘密...
  • 7.6 取得手机内置媒体中的图片文件 424 7.7 相片导航向导与设置背景桌面 427 7.8 调整音量大小 430 7.9 播放mp3资源文件 433 7.10 播放存储卡里的mp3音乐 438 7.11 自制录音/播放录音程序 443 ...
  • java面试题

    2018-04-27 19:55:38
    2:继承:子类继承父类,子类可以拥有父类中已定义的方法,并且子类可以修改父类中的方法使其更适合特殊需求。 3:多台:不同对象对统一消息作出不同响应称之为多态 4:抽象:忽略与当前主题无关的那些方面,将...
  • JavaScript 中的Object与Array等使用的引用赋值,新的对象简单的引用了原始对象,改变新也将影响旧的: foo = {a: 1}; bar = foo; bar.a = 2; foo.a // 2 虽然这样做可以节约内存,但当应用复杂后,造成了状态不可...
  • Android应用开发揭秘--详细书签版

    热门讨论 2012-12-12 13:27:46
    本书实战性强,书中的每个知识点都有配精心设计的示例,尤为值得一提的,它还以迭代的方式重现了各种常用的android应用和经典android游戏的开发全过程,既可 以以它们为范例进行实战演练,又可以将它们直接应用到...
  • 什么是jar包:就是别人封装好字节码文件 2. 作用:就是提高开发效率。使用轮子 3. 使用: 3.1 使用别人写好jar包 step1:在当前项目下,创建一文件夹folder,叫lib step2:将jar包复制到当前...
  • 12.1 搜索引擎在手机中的应用 12.1.1 本地搜索 12.1.2 Web搜索 12.2 Android搜索引擎API简介 12.3 应用实例详解:过滤式搜索 引擎程序 12.3.1 实例分析 12.3.2 实例实现 12.4 Android的GTalk应用开发 12.4.1 GTalk在...
  • 在Data文件夹下有三个文件,分别将三个文件中的 <Licensevendor=”PrimeSense”key=”input the key”/>改为:<Licensevendor=”PrimeSense” key=”0KOIk2JeIBYClPWVnMoRKn5cdY4=”/> 然后执行 cd .. ...
  • 后台更新房产分类,人才分类wm.cre.asp 27.map中的列表是否带有地图不为空的判断条件 28.分类信息频道页-不显示图片问题,标签问题 29.产品发布页店铺ID存在问题 30.团购频道页报名表的模板问题-与活动报名重复 31....
  • Android高级编程--源代码

    热门讨论 2013-02-06 17:39:21
    由于现有的手机应用程序开发构建在各手机厂家私有操作系统之上,所以它限制了第三方应用程序开发,而Android为我们提供了一个开放和通用选择。因为没有了人为制造障碍,所以Android开发人员可以自由地...
  • Android高级编程--详细书签版

    热门讨论 2013-02-06 17:37:52
    由于现有的手机应用程序开发构建在各手机厂家私有操作系统之上,所以它限制了第三方应用程序开发,而Android为我们提供了一个开放和通用选择。因为没有了人为制造障碍,所以Android开发人员可以自由地...
  • 1.1.3 手机中的驱动程序 2 1.2 开源还是不开源的问题 3 1.2.1 雾里看花的开源 3 1.2.2 从为什么选择java谈为什么不开源驱动程序 3 1.2.3 对驱动开发者来说一把双刃剑 4 1.3 Android和Linux ...
  • 1.1.3 手机中的驱动程序 2 1.2 开源还是不开源的问题 3 1.2.1 雾里看花的开源 3 1.2.2 从为什么选择java谈为什么不开源驱动程序 3 1.2.3 对驱动开发者来说一把双刃剑 4 1.3 Android和Linux ...
  • 1.1.3 手机中的驱动程序 2 1.2 开源还是不开源的问题 3 1.2.1 雾里看花的开源 3 1.2.2 从为什么选择java谈为什么不开源驱动程序 3 1.2.3 对驱动开发者来说一把双刃剑 4 1.3 Android和Linux ...
  • Apache Sqoop: 一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中 ...

空空如也

空空如也

1 2 3 4
收藏数 65
精华内容 26
关键字:

手机中的map是什么文件