首页 文章 精选 留言 我的

精选列表

搜索[优化],共10000篇文章
优秀的个人博客,低调大师

阿里云大数据利器Maxcompute-使用mapjoin优化查询

大数据计算服务(MaxCompute,原名 ODPS)是一种快速、完全托管的 GB/TB/PB 级数据仓库解决方案。https://help.aliyun.com/document_detail/27800.html?spm=5176.7840267.6.539.po3IvS主要有三种操作数据的方式SQL,UDF,MapReduce,了解hadoop的同学就比较熟悉这些东西了。 那么Maxcompute的SQL和标准SQL最大的区别就是在Maxcompute中SQL会被解析成MapReduce去执行,当然也可以直接去写MapReduce去计算数据,UDF就是当自带的一些sql引用的函数不能满足业务计算的时候,自己通过代码编写一个函数,sql执行的时候引用。 由此可见实际上底层的计算都是依靠MapReduce这个计算引擎去执行。首先了

优秀的个人博客,低调大师

《Spark大数据处理:技术、应用与性能优化》——导读

https://yqfile.alicdn.com/9fc1970337c275b04055dec83fdf7e27687dd205.png" > 前 言 Spark是发源于美国加州大学伯克利分校AMPLab的大数据分析平台,它立足于内存计算,从多迭代批量处理出发,兼顾数据仓库、流处理和图计算等多种计算范式,是大数据系统领域的全栈计算平台。Spark当下已成为Apache基金会的顶级开源项目,拥有庞大的社区支持,技术也逐渐走向成熟。 为什么要写这本书 大数据还在如火如荼地发展着,突然之间,Spark就火了。还记得最开始接触Spark技术时资料匮乏,只有官方文档和源码可以作为研究学习的资料。写一本Spark系统方面的技术书籍,是我持续了很久的一个想法。由于学习和工作较为紧张,最初只是通过几篇笔记在博客中分享自己学习Spark过程的点滴

优秀的个人博客,低调大师

大数据优化 | 预见未来:谁是你的“克里斯”

“在《预见未来》这部影片中,尼古拉斯·凯奇饰演的克里斯·约翰森有一个特异功能——能够预见未来2秒钟将要发生的事,这一超能力帮助他多次成功避险。商业世界中,Dell Statistica预测分析软件赋予企业“预见未来”的超能力,未来尽在掌控!” 今天,越来越多的企业意识到数据的重要性,且数据已经成为绝大多数企业的重要资产,影响着企业的业务命脉。2015年发布的《中国大数据发展调查报告》显示,大部分企业的数据总量在50TB到500TB之间 ,占调查比例的73%。报告还指出,中国大数据市场,在2016至2018年还将持续增长,增幅将为40%左右。 巨大的数据量中蕴含着无限的价值,也隐藏着无限的商机。大数据这座“金矿”就摆在面前,企业应该如何准确找到“金子”的位置?如何快人一步发掘大数据的“黄金”价值? Dell Statistica能够帮助企业轻松将海量数据转化为最强有力的竞争优势。 Dell Statistica 预见未来不只2秒钟 《中国大数据发展调查报告》 显示,有73.9%的企业认为数据库表是大数据应用当中最主要的数据类型。Dell Statistica提供了企业数据库内和Hadoop内分析。通常情况下,企业都在数据库或Hadoop 集群之外挖掘数据,然后再把挖掘到的数据重新带回服务器或桌面分析——这一导入导出的过程浪费了大量的时间。使用Statistica,企业可直接在内部数据库中对数据进行分析,对任何位置的数据执行优势分析,消除了性能方面的瓶颈。 另外,Statistica支持企业在SQL Server等数据库中或直接在Hadoop内创建预测性模型,并通过不同的程序语言导出,如C、SQL或Java等,然后企业可以根据自己的选择自由地转换到数据环境中。 Dell Statistica 还简化了大数据分析的过程,使企业可以更快速地实施大数据挖掘。 Statistica内置了大量易于使用的方法和模板,企业能够轻松执行数据挖掘、预测分析、机器学习、预测和文本挖掘等功能,更深入地挖掘出海量数据中所隐藏的信息。 Statistica将Hadoop等技术与Lucene/SOLR搜索、Mahout机器学习以及高级自然语言处理相结合,进一步提高了可扩展性和性能。 针对数据类型呈现多样化趋势,Dell Statistica也相应支持来自于关系数据库、NoSQL数据库、云或内部部署等任何来源的任何数据,无论是结构化、半结构化、还是非结构化数据,都可进行高级分析。 Statistica易于上手,为企业用户和高级分析师提供了易于使用的数据挖掘方法和分析工作流模板。包括模型管理在内,Statistica提供了支持整个分析生命周期的完善平台,企业可将业务规则与分析模型相结合以进行实时评分,并且比其他企业级解决方案更加经济实惠。 如文章开头所讲,电影《预见未来》中,克里斯的预测超能力只能看到未来2秒中将要发生的事。相比之下,Dell Statistica的“超能力”绝不仅仅只看到未来2秒。Statistica内置的大量模版、简化的导入导出环境、完善的平台设计——所有这些易于上手的操作设计,都助力企业先人一步发掘数据金矿中的“金子”,更轻松在第一时间最大化数据金矿的“黄金价值”,在大数据时代获得领先优势。 Dell Statistica 受益者不只是“丽兹” 《预见未来》中,克里斯使用预测超能力更想保护的是女友丽兹。而Dell Statistica 所提供的预测超能力,获益的当然不仅仅是一个人…… 从业务分析师、知识工作者,到经理和高管,都可以通过交互式控制板和直观视图轻松协作和浏览数据;通过交互式深入分析和发现,快速地获得所需的答案。管理人员还可以通过网络连接到各种数据源上,实时了解不断变化的数据,从动态的数据中预测发展方向。 百事可乐公司就通过使用Dell Statistica企业版,在数据分析中节省了时间和成本。过去,百事公司的数据需要员工从仪表盘上手动填写到纸质表格中——费时费力,且易遗漏数据。使用Statistica后,操作人员可直接将仪表盘的数据保存到数据库,同时直观地在屏幕上看到质量控制图参数。一旦出现问题,可以立即采取措施来纠正。甚至有些功能可以自动生成报告模版,一键产生结果。 对百事来说,“Statistica的优势是仪表盘可直接发送数据到计算机中处理,不会再出现数据丢失现象。同时,其他用户和同事可以预览数据和分析报告,进而创建出其他统计数据分析”。百事质检部主管Drahomira Bartosova如此评价。 从内置的分析模型、分析步骤到环境的转换,Dell Statistica致力于打造最简化、快捷的路径,推动创新并解决业务难题。 通过随需提供分析功能并为范围更广的群体提供支持,Dell Statistica所提供的“超能力”令企业如虎添翼,未来尽在掌控! 本文转自d1net(转载)

优秀的个人博客,低调大师

RxJava 和 RxAndroid 三(生命周期控制和内存优化

rxjava rxandroid 赵彦军 前言:对Rxjava、Rxandroid不了解的同学可以先看看RxJava 和 RxAndroidRxJava 和 RxAndroid 二(操作符的使用) RxJava使我们很方便的使用链式编程,代码看起来既简洁又优雅。但是RxJava使用起来也是有副作用的,使用越来越多的订阅,内存开销也会变得很大,稍不留神就会出现内存溢出的情况,这篇文章就是介绍Rxjava使用过程中应该注意的事项。 1、取消订阅 subscription.unsubscribe() ; package lib.com.myapplication; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import rx.Observable; import rx.Subscription; import rx.functions.Action1; public class MainActivity extends AppCompatActivity { Subscription subscription ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); subscription = Observable.just( "123").subscribe(new Action1<String>() { @Override public void call(String s) { System.out.println( "tt--" + s ); } }) ; } @Override protected void onDestroy() { super.onDestroy(); //取消订阅 if ( subscription != null ){ subscription.unsubscribe(); } } } 2、线程调度 Scheduler调度器,相当于线程控制器 Schedulers.immediate() : 直接在当前线程运行,相当于不指定线程。这是默认的 Scheduler。 Schedulers.newThread() :总是启用新线程,并在新线程执行操作. Schedulers.io():I/O 操作(读写文件、读写数据库、网络信息交互等)所使用的 Scheduler。行为模式和 newThread() 差不多,区别在于 io() 的内部实现是是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下 io() 比 newThread() 更有效率。不要把计算工作放在 io() 中,可以避免创建不必要的线程。 Schedulers.computation() : 计算所使用的 Scheduler。这个计算指的是 CPU 密集型计算,即不会被 I/O 等操作限制性能的操作,例如图形的计算。这个 Scheduler 使用的固定的线程池,大小为 CPU 核数。不要把 I/O 操作放在 computation() 中,否则 I/O 操作的等待时间会浪费 CPU。 还有RxAndroid里面专门提供了AndroidSchedulers.mainThread(),它指定的操作将在 Android 主线程运行。 常见的场景:为了不阻塞UI,在子线程加载数据,在主线线程显示数据 Observable.just( "1" , "2" , "3" ) .subscribeOn(Schedulers.io()) //指定 subscribe() 发生在 IO 线程 .observeOn( AndroidSchedulers.mainThread() ) //指定 Subscriber 的回调发生在主线程 .subscribe(new Action1<String>() { @Override public void call(String s) { textView.setText( s ); } }) ; 上面这段代码,数据"1"、"2"、"3"将在io线程中发出,在android主线程中接收数据。这种【后台获取数据,前台显示数据】模式适用于大多数的程序策略。 Scheduler 自由多次切换线程。恩,这个更为牛逼 Observable.just(1, 2, 3, 4) // IO 线程,由 subscribeOn() 指定 .subscribeOn(Schedulers.io()) .observeOn(Schedulers.newThread()) .map(mapOperator) // 新线程,由 observeOn() 指定 .observeOn(Schedulers.io()) .map(mapOperator2) // IO 线程,由 observeOn() 指定 .observeOn(AndroidSchedulers.mainThread) .subscribe(subscriber); // Android 主线程,由 observeOn() 指定 从上面的代码可以看出 observeOn() 可以调用多次来切换线程,observeOn 决定他下面的方法执行时所在的线程。 subscribeOn() 用来确定数据发射所在的线程,位置放在哪里都可以,但它是只能调用一次的。 上面介绍了两种控制Rxjava生命周期的方式,第一种:取消订阅 ;第二种:线程切换 。这两种方式都能有效的解决android内存的使用问题,但是在实际的项目中会出现很多订阅关系,那么取消订阅的代码也就越来越多。造成了项目很难维护。所以我们必须寻找其他可靠简单可行的方式,也就是下面要介绍的。 3、rxlifecycle 框架的使用 github地址: https://github.com/trello/RxLifecycle 在android studio 里面添加引用compile 'com.trello:rxlifecycle-components:0.6.1' 让你的activity继承RxActivity,RxAppCompatActivity,RxFragmentActivity 让你的fragment继承RxFragment,RxDialogFragment;下面的代码就以RxAppCompatActivity举例 bindToLifecycle 方法 在子类使用Observable中的compose操作符,调用,完成Observable发布的事件和当前的组件绑定,实现生命周期同步。从而实现当前组件生命周期结束时,自动取消对Observable订阅。 public class MainActivity extends RxAppCompatActivity { TextView textView ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textView); //循环发送数字 Observable.interval(0, 1, TimeUnit.SECONDS) .subscribeOn( Schedulers.io()) .compose(this.<Long>bindToLifecycle()) //这个订阅关系跟Activity绑定,Observable 和activity生命周期同步 .observeOn( AndroidSchedulers.mainThread()) .subscribe(new Action1<Long>() { @Override public void call(Long aLong) { System.out.println("lifecycle--" + aLong); textView.setText( "" + aLong ); } }); } } 上面的代码是Observable循环的发送数字,并且在textview中显示出来 1、没加 compose(this.<Long>bindToLifecycle()) 当Activiry 结束掉以后,Observable还是会不断的发送数字,订阅关系没有解除 2、添加compose(this.<Long>bindToLifecycle()) 当Activity结束掉以后,Observable停止发送数据,订阅关系解除。 从上面的例子可以看出bindToLifecycle() 方法可以使Observable发布的事件和当前的Activity绑定,实现生命周期同步。也就是Activity 的 onDestroy() 方法被调用后,Observable 的订阅关系才解除。那能不能指定在Activity其他的生命状态和订阅关系保持同步,答案是有的。就是 bindUntilEvent()方法。这个逼装的好累! bindUntilEvent( ActivityEvent event) ActivityEvent.CREATE: 在Activity的onCreate()方法执行后,解除绑定。 ActivityEvent.START:在Activity的onStart()方法执行后,解除绑定。 ActivityEvent.RESUME:在Activity的onResume()方法执行后,解除绑定。 ActivityEvent.PAUSE: 在Activity的onPause()方法执行后,解除绑定。 ActivityEvent.STOP:在Activity的onStop()方法执行后,解除绑定。 ActivityEvent.DESTROY:在Activity的onDestroy()方法执行后,解除绑定。 //循环发送数字 Observable.interval(0, 1, TimeUnit.SECONDS) .subscribeOn( Schedulers.io()) .compose(this.<Long>bindUntilEvent(ActivityEvent.STOP )) //当Activity执行Onstop()方法是解除订阅关系 .observeOn( AndroidSchedulers.mainThread()) .subscribe(new Action1<Long>() { @Override public void call(Long aLong) { System.out.println("lifecycle-stop-" + aLong); textView.setText( "" + aLong ); } }); 经过测试发现,当Activity执行了onStop()方法后,订阅关系已经解除了。 上面说的都是订阅事件与Activity的生命周期同步,那么在Fragment里面又该怎么处理的? FragmentEvent 这个类是专门处理订阅事件与Fragment生命周期同步的大杀器 public enum FragmentEvent { ATTACH, CREATE, CREATE_VIEW, START, RESUME, PAUSE, STOP, DESTROY_VIEW, DESTROY, DETACH } 可以看出FragmentEvent 和 ActivityEvent 类似,都是枚举类,用法是一样的。这里就不举例了! 总结 1、这三篇文章的相关代码示例都在 http://git.oschina.net/zyj1609/RxAndroid_RxJava 2、通过上面的三种方法,我相信你在项目中使用Rxjava的时候,已经能够很好的控制了 Rxjava对内存的开销。如果你有其他的方法或者问题,可以留言给我。 RxJava 和 RxAndroid 四(RxBinding的使用)

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册