首页 文章 精选 留言 我的

精选列表

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

Spark SQL 中 dataFrame 学习总结

dataFrame多了数据的结构信息。就是schema。 RDD是分布式的 Java对象的集合。DataFrame是分布式的Row对象的集合。 DataFrame 提供了详细的结构信息,可以让sparkSQL清楚的知道数据集中包含哪些列,列的名称和类型各是什么? RDD是分布式的 Java对象的集合。DataFrame是分布式的Row对象的集合。DataFrame除了提供了 比RDD更丰富的算子以外,更重要的特点是提升执行效率、减少数据读取以及执行计划的优化,比如 filter下推、裁剪等。 提升执行效率 RDD API是函数式的,强调不变性,在大部分场景下倾向于创建新对象而不是修改老对象。这一特点虽然 带来了干净整洁的API,却也使得Spark应用程序在运行期倾向于创建大量临时对象,对GC造成压力。在 现有RDD API的基础之上,我们固然可以利用mapPartitions方法来重载RDD单个分片内的数据创建方式 用复用可变对象的方式来减小对象分配和GC的开销,但这牺牲了代码的可读性,而且要求开发者对Spark 运行时机制有一定的了解,门槛较高。另一方面,Spark SQL在框架内部已经在各种可能的情况下尽量重 用对象,这样做虽然在内部会打破了不变性,但在将数据返回给用户时,还会重新转为不可变数据。利 用 DataFrame API进行开发,可以免费地享受到这些优化效果。 减少数据读取 分析大数据,最快的方法就是 ——忽略它。这里的“忽略”并不是熟视无睹,而是根据查询条件进行恰 当的剪枝。 上文讨论分区表时提到的分区剪 枝便是其中一种——当查询的过滤条件中涉及到分区列时,我们可以根 据查询条件剪掉肯定不包含目标数据的分区目录,从而减少IO。 对于一些“智能”数据格 式,Spark SQL还可以根据数据文件中附带的统计信息来进行剪枝。简单来 说,在这类数据格式中,数据是分段保存的,每段数据都带有最大值、最小值、null值数量等 一些基本 的统计信息。当统计信息表名某一数据段肯定不包括符合查询条件的目标数据时,该数据段就可以直接 跳过(例如某整数列a某段的最大值为100,而查询条件要求a > 200)。 此外,Spark SQL也可以充分利用RCFile、ORC、Parquet等列式存储格式的优势,仅扫描查询真正涉及的 列,忽略其余列的数据。 Dataset可以认为是DataFrame的一个特例,主要区别是Dataset每一个record存储的是一个强类型值而不 是一个Row。因此具有如下三个特点: DataSet可以在编译时检查类型 并且是面向对象的编程接口 DataFrame是面向sparkSQL的接口。 DataFrame和dataSet可以相互转化。 df.as[ElementType] 这样可以把DataFrame转化为DataSet, ds.toDF() 这样可以把DataSet转化为DataFrame。 本文转自 ChinaUnicom110 51CTO博客,原文链接:http://blog.51cto.com/xingyue2011/1964917

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

Android学习笔记--Content Provider 2

FirstContentProvider继承ContentProvider例: PublicclassFirstContentProviderextendsContentProvider{ PublicstaticfinalUriMatcheruriMatcher; PublicstaticfinalintINCOMING_USER_COLLECTION=1; PublicstaticfinalintINCOMING_USER_SINGLE=2; Private DatabaseHelperdh; Static{ uriMatcher=newUriMatcher(UriMatcher.NO_MATCH); //URI限定名的添加验证定义了一个验证的规则 uriMatcher.addURI(FirstMetaData.AUTHORTY,"/users",INCOMING_USER_COLLECTION); uriMatcher.addURI(FirstMetaData.AUTHORTY,"/users/#",INCOMING_USER_SINGLE); } PublicstaticHashMap<String,String>userProjectionMap; Static { userProjectionMap=newHashMap<String,String>(); //._ID就是baseColumns实现的结果 userProjectionMap.put( FirstMetaData._ID,FirstMetaData._ID ); userProjectionMap.put( FirstMetaData.USER_NAME,FirstMetaData.USER_NAME ); } @Override Publicintdelete(Uriarg0,Stringarg1,String[]arg2){ System.out.println("delete"); Return0; } //根据传入的Uri,返回该Uri所表示的数据类型 @Override PublicStringgetType(Uriuri){ System.out.println("getType"); Switch(uriMatcher.match(uri)){ CaseINCOMING_USER_COLLECTION: Return FirstMetaData.CONTENT_TYPE; CaseINCOMING_USER_SINGLE: ReturnFirstMetaData.CONTENT_TYPE_ITEM; Default: ThrownewIllegalArgumentExecption("UnknownURI"+uri); } } //该函数的返回值是一个Uri,这个URi表示的是刚刚使用这个函数所插入的数据 //content:// com.android.FirstContentProvider/users/1 @Override PublicUriinsert(Uriuri,ContentValuevalues){ System.out.println("insert"); SQLiteDatabasedb=dh.getWrittableDatabase(); LongrowId=db.insert( FirstMetaData.TABLE_NAME,null,values ); If(rowId>0){ //以Content起头的Uri都可以用ContentUris来处理 UriinsertedUserUri=ContentUris.withAppendedId(UserTableMetaData.CONTENT_URI,rowId); //通知监听器,数据已经改变 getContext().getContentResolver().notifyChange(insertedUserUri,null); ReturninsertedUserUri; } ThrownewSQLExecption("Failedtoinsertrowinto"+uri); } @Override PublicbooleanonCreate(){ Dh=newDatabaseHelper(getContext(), FirstMetaData.DATABASE_NAME ); System.out.println("onCreate"); Returntrue; } @Override PublicCursorquery(Uriuri,String[]projection,Stringselection,String[]selectionArgs,StringsortOrder){ SQLiteQueryBuilderqb=newSQLiteQueryBuilder(); Switch(uriMatcher.match(uri)){ CaseINCOMING_USER_COLLECTION: qb.setTables( FirstMetaData.TABLE_NAME ); qb.setProjectionMap(userProjectionMap); Break; CaseINCOMING_USER_SINGLE: qb.setTables( FirstMetaData.TABLE_NAME ); qb.setProjectionMap(userProjectionMap); //取回了单条数据list qb.appendWhere( FirstMetaData._ID+"="+uri.getPathSeqments().get(1) ); Break; } StringorderBy; If(TextUtils.isEmpty(sortOrder)){ orderBy= FirstMetaData.DEFAULT_SORT_ORDER; }else{ orderBy=sortOrder; } SQLiteDatabasedb=dh.getWritableDatabase(); Cursorc=qb.query(db,projection,selection,selectionArgs,null,null,orderBy); c.setNotificationUri(getContext().getContentResolver(),uri); System.out.println("query"); Returnc; } @Override Publicintupdate(Uriarg0,ContentValuesarg1,Stringarg2,String[]arg3){ System.out.println("update"); } } FirstMetaData(一些静态常量)例: PublicclassFirstMetaData{ //URI限定名的名称包名+类名 PublicstaticfinalStringAUTHORTY="com.android.FirstContentProvider"; //数据库名称 PublicstaticfinalStringDATABASE_NAME="FirstContentProvider.db"; //数据库版本 PublicstaticfinalintDATABASE_VERSION=1; //表名 PublicstaticfinalStrintUSERS_TABLE_NAME="users"; //BaseColumns实现了表的_id列 PublicstaticfinalclassUserTableMetaDataimplementsBaseColumns{ //表名 PublicstaticfinalStringTABLE_NAME="users"; //访问该ContentProvider的URI PublicstaticfinalUriCONTENG_URI=Uri.parse("content://"+AUTHORY+"/users"); //整张表的数据类型是vnd.android.cursor.dir/vnd+name; PublicstaticfinalStringCONTENT_TYPE="vnd.android.cursor.dir/vnd.FinrstContentProvider.ser"; //单条数据类型定义vnd.android.cursor.item/vnd+name PublicstaticfinalStringCONTENT_TYPE_ITEM="vnd.android.cursor.item/vnd.FinrstContentProvider.user"; //列名 PublicstaticfinalStringUSER_NAME="name"; //默认排序方法 PublicstaticfinalStringDEFAULT_SORT_ORDER="_iddesc"; } } 最后在androidMnaifest.xml中注册provider与Activity同级authorities中的数据一定要与CONTENG_URI的一致 <providerandroid:name="com.android.FirstContentProvider" Android:authorities="com.android.FirstContentProvider"/> 本文转自My_King1 51CTO博客,原文链接:http://blog.51cto.com/apprentice/1360567,如需转载请自行联系原作者

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

Android学习笔记--Activity和intent

MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0 多个Activity之间的关系 跳转关键startActivity(Intentintent) 在onClickListener监听器的onClick方法中 内部类继承OnClickListener Intentintent=newIntent(); intent.putExtra(key,value);//设置传参数据 intent.setClass(this,class);//设置跳转参数 Activity.this.startActivity(intent); 事件绑定 myButton=(Button)findViewById(R.id.myButton); myButton.setOnClickListener(new内部类名());//注册成功 Intent对象的获取 Intentintent=getIntent(); Stringvalue=intent.getStringExtra(key); TextView=(TextView)findViewById(R.id.myTextView); TextView.setText(value); 2.Intent的基本作用 Intent对象包含了一组信息相当于一个请求 1.Componentname(欲启动Activity的名称等等) 2.Action(另一个Activity的动作) 3.Data(传递的数据) 4.Category 5.Exreas(额外的键值对信息) 6.Flags 启动另一个Activity 例Urlurl=Url.parse("smsto://08000000123"); Intentintent=newIntent(Intent.ACTION_SENDTO,url); intent.putExtra("sms_body","TheSMStext"); startActivity(intent); 本文转自My_King1 51CTO博客,原文链接:http://blog.51cto.com/apprentice/1360578,如需转载请自行联系原作者

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

Android学习笔记--XML文件解析

MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0 1.什么是SAX SimpleAPIforXML,既是指一种接口,也是指一个软件包 作为接口,SAX是事件驱动型XML解析的一个标准接口 2.SAX基本原理 SAX的哦给你工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束,元素(element)开始与结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束. 大多数SAX实现都会产生一下类型的事件 { 在文档的开始和结束时出发文档处理事件 在文档内每一XML元素接受解析的前后触发元素事件 任何元数据通常都由氮素的事件交付 在处理文档的DTD或Schema时产生DTD或Schema事件 产生错误事件用来通知主机应用程序解析错误 } 3.SAX常用接口 ContentHandler接口 ContentHandler是java类包中一个特殊的SAX接口,位于org.xml.sax包中.该接口封装了一些对事件处理的方法,当XML解析器开始解析XML输入文档时,它会遇到某些特殊的事件,比如文档的开头和结束,元素的开头和结束,以及元素中的字符数据等事件.当遇到这些事件时,XML解析器会调用ContentHandler接口中相应的方法来响应该事件 ContnetHandler接口的方法有以下几种 { VoidstartDocument(); VoidendDocument(); VoidstartElement(Stringuri,StringlocalName,stringqName,Attributesatts) VoidendElement(Stringuri,StringlocalName,StringqName) Voidcharacters(char[]ch,intstart,intlength) } 4.SAX解析 解析文档过程 例:<doc> <para>HelloWorld!</para> </doc> 在解析文档的过程中会产生如下一系列事件 Startdocument { Startelement:doc A:创建事件处理程序 Startelement:para Characters:HelloWorld! B:创建SAX解析器 Endelement:para Endelement:doc C:将事件处理程序分配给解析器 D:对文档进行解析,将每个事件发送给处理程序 Enddocument } 解析样例: 1.声明控件对象(略) 2.获得控件对象(略) 3.绑定事件(略) 4.创建监听器对象 PublicvoidonClick(Viewv){ HttpDownloaderhd=newHttpDownloader(); StringresultStr=hd.download("XMLURL"); System.out.priintln(resultStr); Try { //创建一个SAXParseFactory SAXParserFactoryfactory=SAXParserFactory.newInstance(); XMLReaderreader=factory.newSAXParser().getXMLReader(); //为XMLReader设置内容处理器MyContentHandler reader.setContentHandler(newMyContenHandler()); //开始解析文件字符串构造成reader之后构造成inputSource Reader.parse(newInputSource(newStringReader(resultStr))); }catch(Execptione){ e.printStackTrace(); } } XML文件写法: <wordkers> <workerid="AQ01"> <name>mark</name> <sex>male</sex> <status>manager</status> <address>NewYork</address> <salary>$4000</salary> <workerid="AQ02"> <name>lily</name> <sex>female</sex> <status>assists</status> <address>H</address> <salary>$2000</salary> <workerid="AQ03"> <name>tom</name> <sex>male</sex> <status>manager</status> <address>F</address> <salary>$5000</salary> </wordkers> MyContenHandler的写法例: PublicclassMyContenHandlerExtendsDefaultHandler{//此处体现了适配器模式 StringName,Sex,Status,Address,Salary StringtagName; //开始document PublicvoidstartDocument()throwsSAXExecption{ System.out.println("-------begin--------"); } //结束document PublicvoidendDocument()throwsSAXExecption{ System.out.println("-------end--------"); } //开始节点对象 PublicvoidstartElement(StringnamespaceURI,StringlocalName,StringqName,Attributesattr)throwsSAXExecption{ tagName=localName; If(localName.equals("worker")){ //获取标签的全部属性 For(inti=0;i<attr.getLength();i++){ System.out.println(attr.getLocalName(i)+"="+attr.getValue(i)) } } } //结束节点对象 PublicvoidendElement(StringnamespaceURI,StringlocalName,StringqName)throwsSAXExecption{ //在一个标签解析完之后,打印所有标签的信息 If(localNmae.equals("worder")){ This.printout(); } } //读取文本对象 Publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXExecption{ If(tagNmae.equals("name")) Hisname=newString(ch,start,length); Elseif(tagNmae.equals("sex")) Sex=newString(ch,start,length); Elseif(tagNmae.equals("status")) Status=newString(ch,start,length); Elseif(tagNmae.equals("address")) Address=newString(ch,start,length); Elseif(tagNmae.equals("salary")) Salary=newString(ch,start,length); } //打印读出的信息 Publicvoidprintout(){ System.out.println("name--->"+Name); System.out.println("name--->"+Sex); System.out.println("name--->"+Status); System.out.println("name--->"+Address); System.out.println("name--->"+Salary); } } 本文转自My_King1 51CTO博客,原文链接:http://blog.51cto.com/apprentice/1360566,如需转载请自行联系原作者

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

Linux日志管理学习

1、日志介绍 日志记录了系统每天发生的各种事情,可以通过它检查错误发生的原因,或者受到攻击留下的痕迹。为了便于管理日志通常存放在/var/log/下,一部分程序公用一个日志文件,一部分程序使用单个的日志文件,有些大型服务程序日志文件较多,会建立相应的子目录来存放日志文件。 2、日志类型 /var/log/secure:系统安装日志,文本格式,应周期性分析 /var/log/btmp:当前系统上,用户的失败尝试登录相关的日 志信息,二进制格式,lastb命令进行查看 /var/log/wtmp:当前系统上,用户正常登录系统的相关日志 信息,二进制格式,last命令可以查看 /var/log/lastlog:每一个用户最近一次的登录信息,二进制格 式,lastlog命令可以查看 /var/log/dmesg:系统引导过程中的日志信息,文本格式 文本查看工具查看 专用命令dmesg查看 /var/log/messages :系统中大部分的信息 /var/log/anaconda : anaconda的日志(centos6没有) 3、日志配置 Redhat5 服务名: syslog 配置文件:/etc/syslog.conf C/S架构:通过TCP或UDP协议的服务完成日志记录传送, 将分布在不同主机的日志实现集中管理 事件记录格式:日期时间 主机 进程[pid]: 事件内容 centos6 7 服务名:rsyslog 特性:多路工作模块,通过UDP, TCP, SSL, TLS, RELP协议的服务完成日志记录传送, 将分布在不同主机的日志实现集中管理 ,自定义输出格式,关系型数据库实现日志存储 配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf 库文件: /lib64/rsyslog/*.so 配置文件格式:由三部分组成 MODULES:相关模块配置 GLOBAL DIRECTIVES:全局配置 RULES:日志记录相关的规则配置 RULES配置格式: facility.priority; facility.priority… target facility: 设施,从功能或程序上对日志进行归类 auth, authpriv, cron, daemon,ftp,kern, lpr, mail, news, security(auth), user, uucp, local0-local7, syslog priority: 优先级别,从低到高排序 debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic) *: 所有级别 none:没有级别,即不记录 PRIORITY:指定级别(含)以上的所有级别 =PRIORITY:仅记录指定级别的日志信息 target: 文件路径:通常在/var/log/,文件路径前的-表示异步写入 用户:将日志事件通知给指定的用户,* 表示登录的所有用户 日志服务器:@host,把日志送往至指定的远程服务器记录 管道: | COMMAND,转发给其它命令处理 例: 5、日志管理 Systemd 统一管理所有 Unit 的启动日志。带来的好处就是 ,可以只用journalctl一个命令,查看所有日志(内核日志和 应用日志)。日志的配置文件是etc/systemd/journald.conf 查看所有日志(默认情况下 ,只保存本次启动的日志) journalctl 查看内核日志(不显示应用日志) journalctl -k 查看系统本次启动的日志 journalctl -b journalctl -b -0 查看上一次启动的日志(需更改设置) journalctl -b -1 日志默认分页输出,--no-pager 改为正常的标准输出 journalctl --no-pager 6、日志滚动或者日志转储 日志长期记录会形成一个很大的文件,对于查找信息很不方便,所以在配置文件/etc/logrotate.conf中设定达到一定大小或者每隔一定时间生成新的日志文件,称为日志转储,旧的文件通常以日志名+日期的格式存储,可以在配置文件自定义。

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

SQLite学习快速入门-- 基础介绍

一、介绍:SQLite是目前最流行的开源嵌入式数据库,主要特征有: 1). 管理简单。 2). 移植性好,SQLite生成的数据库文件可以在各个平台无缝移植。 3). 可以非常方便的以多种形式嵌入到其他应用程序中,如静态库、动态库等。 4). 易于维护。 二、用途 本地轻量级数据库的最佳选择之一,android系统的标配数据库就是这个,还有配置文件也是一方面,它更多的用于中间数据、实时数据以及小数据量个人信息的存储。 三、工具的使用 SQLite Database Browser 如下图 四、与其它数据库的区别 于access的区别,sqlite的便携性和平台无关性要远远好于access,只是在可视化操作方面确实不如access。 本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2012/02/20/2358955.html,如需转载请自行联系原作者

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

HBase全网最佳学习资料汇总

前言 HBase这几年在国内使用的越来越广泛,在一定规模的企业中几乎是必备存储引擎,互联网企业阿里巴巴、京东、小米都有数千台的HBase集群,中国电信的话单、中国人寿的保单都是存储在HBase中。注意大公司有数十个数百个HBase集群,此点跟Hadoop集群很不相同。另外,数据需求,很多公司是mysql+hbase+hadoop(spark),满足关系型数据库需求,满足大规模结构化存储需求,满足复杂分析的需求。如此流行的原因来源于很多方面,如: 开源繁荣的生态:1. 任何公司倒闭了,开源的HBase还在 2.几乎每家公司都可以去下载源码,改进她,再反馈给社区,就如阿里已经反馈了数百个patch了。加入的人越多,引擎就越好 跟HADOOP深度结合:本就同根同源,在数据存储在HBase后,如果想复杂分析,则非常方便 高扩展、高容量、高性能、低

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

Spark学习之RDD简单算子

collect 返回RDD的所有元素 scala>varinput=sc.parallelize(Array(-1,0,1,2,2)) input:org.apache.spark.rdd.RDD[Int]=ParallelCollectionRDD[15]atparallelizeat<console>:27 scala>varresult=input.collect result:Array[Int]=Array(-1,0,1,2,2) count,coutByValue count返回RDD的元素数量,countByValue返回每个值的出现次数 scala>varinput=sc.parallelize(Array(-1,0,1,2,2)) scala>varresult=input.count result:Long=5 scala>varresult=input.countByValue result:scala.collection.Map[Int,Long]=Map(0->1,1->1,2->2,-1->1) take,top,takeOrdered take返回RDD的前N个元素 takeOrdered默认返回升序排序的前N个元素,可以指定排序算法 Top返回降序排序的前N个元素 varinput=sc.parallelize(Array(1,2,3,4,9,8,7,5,6)) scala>varresult=input.take(6) result:Array[Int]=Array(1,2,3,4,9,8) scala>varresult=input.take(20) result:Array[Int]=Array(1,2,3,4,9,8,7,5,6) scala>varresult=input.takeOrdered(6) result:Array[Int]=Array(1,2,3,4,5,6) scala>varresult=input.takeOrdered(6)(Ordering[Int].reverse) result:Array[Int]=Array(9,8,7,6,5,4) scala>varresult=input.top(6) result:Array[Int]=Array(9,8,7,6,5,4 ) Filter 传入返回值为boolean的函数,返回改函数结果为true的RDD scala>varinput=sc.parallelize(Array(-1,0,1,2)) scala>varresult=input.filter(_>0).collect() result:Array[Int]=Array(1,2) map,flatmap map对每个元素执行函数,转换为新的RDD,flatMap和map类似,但会把map的返回结果做flat处理,就是把多个Seq的结果拼接成一个Seq输出 scala>varinput=sc.parallelize(Array(-1,0,1,2)) scala>varresult=input.map(_+1).collect result:Array[Int]=Array(0,1,2,3) scala>varresult=input.map(x=>x.to(3)).collect result:Array[scala.collection.immutable.Range.Inclusive]=Array(Range(-1,0,1,2,3),Range(0,1,2,3),Range(1,2,3),Range(2,3)) scala>varresult=input.flatMap(x=>x.to(3)).collect result:Array[Int]=Array(-1,0,1,2,3,0,1,2,3,1,2,3,2,3) distinct RDD去重 scala>varinput=sc.parallelize(Array(-1,0,1,2,2)) scala>varresult=input.distinct.collect result:Array[Int]=Array(0,1,2,-1) Reduce 通过函数聚集RDD中的所有元素 scala>varinput=sc.parallelize(Array(-1,0,1,2)) scala>varresult=input.reduce((x,y)=>{println(x,y);x+y}) (-1,1)//处理-1,1,结果为0,RDD剩余元素为{0,2} (0,2)//上面的结果为0,在处理0,2,结果为2,RDD剩余元素为{0} (2,0)//上面结果为2,再处理(2,0),结果为2,RDD剩余元素为{} result:Int=2 sample,takeSample sample就是从RDD中抽样,第一个参数withReplacement是指是否有放回的抽样,true为放回,为false为不放回,放回就是抽样结果可能重复,第二个参数是fraction,0到1之间的小数,表明抽样的百分比 takeSample类似,但返回类型是Array,第一个参数是withReplacement,第二个参数是样本个数 varrdd=sc.parallelize(1to20) scala>rdd.sample(true,0.5).collect res33:Array[Int]=Array(6,8,13,15,17,17,17,18,20) scala>rdd.sample(false,0.5).collect res35:Array[Int]=Array(1,3,10,11,12,13,14,17,18) scala>rdd.sample(true,1).collect res44:Array[Int]=Array(2,2,3,5,6,6,8,9,9,10,10,10,14,15,16,17,17,18,19,19,20,20) scala>rdd.sample(false,1).collect res46:Array[Int]=Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20) scala>rdd.takeSample(true,3) res1:Array[Int]=Array(1,15,19) scala>rdd.takeSample(false,3) res2:Array[Int]=Array(7,16,6) collectAsMap,countByKey,lookup collectAsMap把PairRDD转为Map,如果存在相同的key,后面的会覆盖前面的。 countByKey统计每个key出现的次数 Lookup返回给定key的所有value scala>varinput=sc.parallelize(List((1,"1"),(1,"one"),(2,"two"),(3,"three"),(4,"four"))) scala>varresult=input.collectAsMap result:scala.collection.Map[Int,String]=Map(2->two,4->four,1->one,3->three) scala>varresult=input.countByKey result:scala.collection.Map[Int,Long]=Map(1->2,2->1,3->1,4->1) scala>varresult=input.lookup(1) result:Seq[String]=WrappedArray(1,one) scala>varresult=input.lookup(2) result:Seq[String]=WrappedArray(two) groupBy,keyBy groupBy根据传入的函数产生的key,形成元素为K-V形式的RDD,然后对key相同的元素分组 keyBy对每个value,为它加上key scala>varrdd=sc.parallelize(List("A1","A2","B1","B2","C")) scala>varresult=rdd.groupBy(_.substring(0,1)).collect result:Array[(String,Iterable[String])]=Array((A,CompactBuffer(A1,A2)),(B,CompactBuffer(B1,B2)),(C,CompactBuffer(C))) scala>varrdd=sc.parallelize(List("hello","world","spark","is","fun")) scala>varresult=rdd.keyBy(_.length).collect result:Array[(Int,String)]=Array((5,hello),(5,world),(5,spark),(2,is),(3,fun)) keys,values scala>varinput=sc.parallelize(List((1,"1"),(1,"one"),(2,"two"),(3,"three"),(4,"four"))) scala>varresult=input.keys.collect result:Array[Int]=Array(1,1,2,3,4) scala>varresult=input.values.collect result:Array[String]=Array(1,one,two,three,four) mapvalues mapvalues对K-V形式的RDD的每个Value进行操作 scala>varinput=sc.parallelize(List((1,"1"),(1,"one"),(2,"two"),(3,"three"),(4,"four"))) scala>varresult=input.mapValues(_*2).collect result:Array[(Int,String)]=Array((1,11),(1,oneone),(2,twotwo),(3,threethree),(4,fourfour)) union,intersection,subtract,cartesian union合并2个集合,不去重 subtract将第一个集合中的同时存在于第二个集合的元素去掉 intersection返回2个集合的交集 cartesian返回2个集合的笛卡儿积 scala>varrdd1=sc.parallelize(Array(-1,1,1,2,3)) scala>varrdd2=sc.parallelize(Array(0,1,2,3,4)) scala>varresult=rdd1.union(rdd2).collect result:Array[Int]=Array(-1,1,1,2,3,0,1,2,3,4) scala>varresult=rdd1.intersection(rdd2).collect result:Array[Int]=Array(1,2,3) scala>varresult=rdd1.subtract(rdd2).collect result:Array[Int]=Array(-1) scala>varresult=rdd1.cartesian(rdd2).collect result:Array[(Int,Int)]=Array((-1,0),(-1,1),(-1,2),(-1,3),(-1,4),(1,0),(1,1),(1,2),(1,3),(1,4),(1,0),(1,1),(1,2),(1,3),(1,4),(2,0),(2,1),(2,2),(2,3),(2,4),(3,0),(3,1),(3,2),(3,3),(3,4)) 本文作者:Endless2010 来源:51CTO

资源下载

更多资源
Mario

Mario

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

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

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

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册