首页 文章 精选 留言 我的

精选列表

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

《从零开始学Swift》学习笔记(Day 26)——可选链

在Swift程序表达式中会看到问号(?)和感叹号(!),它们代表什么含义呢?这些符号都与可选类型和可选链相关,下面来看看可选链。 可选链: 类图: 它们之间是典型的关联关系类图。这些类一般都是实体类,实体类是系统中的人、事、物。Employee通过dept属性与Department关联,Department通过comp属性与Company关联。 下面看示例代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class Employee{ varno:Int= 0 varname:String= "Tony" varjob:String? varsalary:Double= 0 vardept:Department=Department() } class Department{ varno:Int= 10 varname:String= "SALES" varcomp:Company=Company() } class Company{ varno:Int= 1000 varname:String= "EOrient" } letemp=Employee() //Employee实例 print(emp.dept.comp.name) // emp.dept.comp.name可以引用到Company实例,形成一个引用的链条,但是这个“链条”任何一个环节“断裂”都无法引用到最后的目标(Company实例)。 给定一个Employee实例,一定会有一个Department与其关联。但现实是一个新入职员工未必有部门,这种关联关系有可能有值,也有可能没有值,我们需要使用可选类型(Department?)声明dept属性。 修改代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class Employee{ varno:Int= 0 varname:String= "Tony" varjob:String? varsalary:Double= 0 vardept:Department? //=Department() } class Department{ varno:Int= 10 varname:String= "SALES" varcomp:Company? //=Company() } class Company{ varno:Int= 1000 varname:String= "EOrient" } letemp=Employee() print(emp.dept!.comp!.name) //显示拆包 print(emp.dept?.comp?.name) //可选链 其中可选类型的引用,可以使用感叹号(!)进行显示拆包,代码修改如下: 1 print(emp.dept!.comp!.name) 但是显示拆包有一个弊端,如果可选链中某个环节为nil,将会导致代码运行时错误。我们可以采用更加“温柔”的引用方式,使用问号(?)来代替原来感叹号(!)的位置,如下所示: 1 print(emp.dept?.comp?.name) 本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1746584,如需转载请自行联系原作者

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

Hadoop概念学习系列之Hadoop能做什么?(二)

大数据时代已经到来,金融数据、电商数据、社交数据、游戏数据…….这些数据的规模、结构、增长的速度都给传统数据存储和处理技术带来巨大考验。Hadoop的简单方便、可扩展性和健壮性让其在大数据处理方面占尽优势,其主要适合的应用场景有: 1) 搜索引擎,Doug Cutting设计Hadoop的初衷,就是为了针对大规模的网页快速建立索引。 2) 大数据存储,利用Hadoop的分布式存储能力,例如数据备份、数据仓库等。 3) 大数据处理,利用Hadoop的分布式处理能力,例如数据挖掘、数据分析等。 4) 科学研究,Hadoop是一种分布式的开源框架,对于分布式计算有很大程度地参考价值。 目前,Hadoop已经成长为一个庞大的体系,只要和海量数据相关的领域,都有Hadoop的身影。 预计到2020年,每年产生的数字信息中将会有1/3的内容驻留在云平台中或借助云平台处理。我们需要对这些数据进行分析处理,以获取更多有价值的信息。那么我们如何高效地存储管理这些数据、如何分析这些数据呢?这时可以选用Hadoop系统。 当然,这上面仅仅是部分而已,不多赘述。 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5058092.html,如需转载请自行联系原作者

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

Hadoop HBase概念学习系列之什么是HBase? (一)

HBase– Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。 HBase是GoogleBigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用HadoopHDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。 上图描述了Hadoop EcoSystem中的各层系统,其中HBase位于结构化存储层,Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。 此外,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5481207.html,如需转载请自行联系原作者

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

[Android学习笔记九] Android 开发中图片灰阶(黑白)显示

灰阶显示图片的典型应用就是用户头像,如用户在线头像显示彩色(原图),不在线显示灰色(黑白图)。总结一点就是更加一张原始图片来通过颜色的过滤处理计算得到不同显示效果的图片。这方法的API主要位于:android. 使用上文中提到的“三种算法转换彩色灰阶”一文中提到的灰阶计算方法产生的黑白图片显示效果如下图: 说明:通过Use Matrix是使用Android的ColorMatrix和ColorFilter实现,其中设置ColorMatrix的setSaturation(float sat)饱和度设置为0时颜色过滤之后显示灰阶,android.graphics.ColorMatrix的内部实现和具体RGB颜色权重值近似等于图中BT709中的权重。 代码示例(依赖此文中附加的灰阶计算方法封装类) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 @Override protected void onCreate(BundlesavedInstanceState){ super .onCreate(savedInstanceState); setContentView(R.layout.activity_grayscale); ButterKnife.bind( this ); BitmapDrawablebd=(BitmapDrawable)Original_ImageView.getDrawable(); Bitmapbitmap=bd.getBitmap(); Log.d(TAG, "w=" +bitmap.getWidth()+ ",h=" +bitmap.getHeight()+ ",c=" +bitmap.getConfig().toString()); //0BT709 Bitmapmatrix=Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),Bitmap.Config.ARGB_8888); Canvascanvas= new Canvas(matrix); Paintpaint= new Paint(); ColorMatrixcolorMatrix= new ColorMatrix(); //传入一个大于1的数字将增加饱和度,而传入一个0~1之间的数字会减少饱和度。0值将产生一幅灰度图像 //AndroidColorMatrix默认的灰阶计算采用下面的BT709标准 colorMatrix.setSaturation(0f); ColorMatrixColorFiltercolorMatrixColorFilter= new ColorMatrixColorFilter(colorMatrix); paint.setColorFilter(colorMatrixColorFilter); canvas.drawBitmap(bitmap,0f,0f,paint); Matrix_ImageView.setImageBitmap(matrix); //原始图片 Bitmapsunflower=XUtils.BitmapUtil.decodeMutableBitmapFromResourceId( this ,R.drawable.sunflower); //1 Bitmaplightness=grayScale(sunflower,XUtils.GrayScaleUtil.GrayScale.Lightness); Lightness_ImageView.setImageBitmap(lightness); //2 Bitmapaverage=grayScale(sunflower,XUtils.GrayScaleUtil.GrayScale.Average); Average_ImageView.setImageBitmap(average); //3 Bitmapluminosity=grayScale(sunflower,XUtils.GrayScaleUtil.GrayScale.Luminosity); Luminosity_ImageView.setImageBitmap(luminosity); //4 Bitmapbt709=grayScale(sunflower,XUtils.GrayScaleUtil.GrayScale.BT709); BT709_ImageView.setImageBitmap(bt709); //5 Bitmaprmy=grayScale(sunflower,XUtils.GrayScaleUtil.GrayScale.RMY); RMY_ImageView.setImageBitmap(rmy); //6 Bitmapy=grayScale(sunflower,XUtils.GrayScaleUtil.GrayScale.Y); Y_ImageView.setImageBitmap(y); } public BitmapgrayScale( final Bitmapbitmap,XUtils.GrayScaleUtil.GrayScalegrayScale){ if ( null ==bitmap|| null ==grayScale){ return null ; } Bitmaprs=Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),Bitmap.Config.ARGB_8888); Canvascanvas= new Canvas(rs); Paintpaint= new Paint(); for ( int x= 0 ,w=bitmap.getWidth();x<w;x++){ for ( int y= 0 ,h=bitmap.getHeight();y<h;y++){ int c=bitmap.getPixel(x,y); int a=Color.alpha(c); int r=Color.red(c); int g=Color.red(c); int b=Color.blue(c); int gc=grayScale.grayScale(r,g,b); paint.setColor(Color.argb(a,gc,gc,gc)); canvas.drawPoint(x,y,paint); } } return rs; } 关于ColorMatrix的介绍参见Android document : 本地:${SDK}/docs/reference/android/graphics/ColorMatrix.html 本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1719008,如需转载请自行联系原作者

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

Storm概念学习系列之storm的定时任务

至于为什么,有storm的定时任务。这个很简单。但是,这个在工作中非常重要! 假设有如下的业务场景 这个spoult源源不断地发送数据,boilt呢会进行处理。然后呢,处理后的结果,假设要写到mysql里面。 假设,spout有几十万条,这么过来。写入到bolt,意味着,它一秒钟要调用mysql几十万此。即操作频率太快,这样导致会出现问题。 所以,很有必要进行storm的定时任务!!! storm的定时任务,它可以每隔指定的时间将数据整合一次存入数据库。 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/7249914.html,如需转载请自行联系原作者

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

《从零开始学Swift》学习笔记(Day 16)——字典集合

Swift字典表示一种非常复杂的集合,允许按照某个键来访问元素。字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合。键集合是不能有重复元素的,而值集合是可以重复的,键和值是成对出现的。 字典声明与初始化 Swift字典类型是Dictionary,也是一个泛型集合。 在声明一个Dictionary类型的时候可以使用下面的语句之一。 1 2 varstudentDictionary1:Dictionary<Int,String> varstudentDictionary2:[Int:String] 声明的字典需要进行初始化才能使用,字典类型往往是在声明的同时进行初始化的。示例代码如下: 1 2 3 4 5 varstudentDictionary1:Dictionary<Int,String> =[ 102 : "张三" , 105 : "李四" , 109 : "王五" ] varstudentDictionary2=[ 102 : "张三" , 105 : "李四" , 109 : "王五" ] letstudentDictionary3=[ 102 : "张三" , 105 : "李四" , 109 : "王五" ] 字典遍历 字典遍历过程可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历。这些遍历过程都是通过for-in循环实现的。 下面是遍历字典的示例代码: 1

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

Android开发学习笔记:如何移除EditText上的输入焦点

移除EditText上的输入焦点的方法有很多种,下面介绍一种简单实用的方法。 1.先看下面代码的在模拟器上运行的效果 EditTextDemoActivity.java packagecom.android.EditTextDemo.activity; importandroid.app.Activity; importandroid.os.Bundle; publicclassEditTextDemoActivityextendsActivity{ /**Calledwhentheactivityisfirstcreated.*/ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); } } main.xml <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> strings.xml <?xmlversion="1.0"encoding="utf-8"?> <resources> <stringname="hello">HelloEditText!</string> <stringname="app_name">EditTextDemo</string> </resources> 效果图: 这时的光标是在第一个EditText闪烁的,第二个EditText却没有 2.将上面的main.xml改成如下所示,即是将第一个EditText的高度,宽度改为0dp,这样就能覆盖有光标闪烁的第一个EditText,从而达到了移除EditText上的输入焦点的效果 <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <EditText android:layout_width="0dp" android:layout_height="0dp" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> 效果图: 本文转自 lingdududu 51CTO博客,原文链接: http://blog.51cto.com/liangruijun/627850

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

《从零开始学Swift》学习笔记(Day 31)——存储属性

Swift中的属性分为存储属性和计算属性,存储属性就是Objective-C中的数据成员,计算属性不存储数据,但可以通过计算其他属性返回数据。 存储属性可以存储数据,分为常量属性(用关键字let定义)和变量属性(用关键字var定义)。 存储属性概念: 我们在前面曾用到过属性,Employee类和Department结构体。它们的类图如下,Employee的部门属性dept与Department之间进行了关联。 我们可以在定义存储属性时指定默认值,示例代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class Employee{ letno:Int= 0 varname:String= "" varjob:String? varsalary:Double= 0 vardept:Department? } structDepartment{ letno:Int= 0 varname:String= "" } letemp=Employee() emp.no= 100 //编译错误:修改常量属性,程序会发生编译错误 letdept=Department() dept.name= "SALES" //编译错误:dept是值类型,值类型不能修改,即便它的属性name是变量属性,也不能修改 letemp1=Employee() emp1.name= "Tony" 本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1746594,如需转载请自行联系原作者

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

openstack学习笔记三 创建第一个实例

登陆admin 创建一个基本网络 镜像 已经安装好操作系统的硬盘文件 计算--镜像--创建镜像 名称centos7.2-1511 镜像源 镜像地址 镜像地址 http://mirrors.163.com/centos/7.2.1511/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso 镜像格式iso 最小硬盘 10GB 最低内存 1024MB 数据复制 不选 公有 选择 计算--实例--启动云主机 云主机名称 test1 云主机启动源 centos7.2-1511 点击 test1 打开控制台 绑定浮动IP 设置安全组 计算--访问安全--添加安全组test 添加规则,然后应用 创建密钥对 把它下载下来 云硬盘 登陆主机 就可以看到了 对象存储(云网盘)可以存自己的文件 本文转自 295631788 51CTO博客,原文链接:http://blog.51cto.com/hequan/1795927,如需转载请自行联系原作者

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

Spark RDD概念学习系列之RDD的checkpoint(九)

RDD的检查点 首先,要清楚。为什么spark要引入检查点机制?引入RDD的检查点? 答:如果缓存丢失了,则需要重新计算。如果计算特别复杂或者计算耗时特别多,那么缓存丢失对于整个Job的影响是不容忽视的。为了避免缓存丢失重新计算带来的开销,Spark又引入检查点机制。 RDD的缓存能够在第一次计算完成后,将计算结果保存到内存、本地文件系统或者Tachyon(分布式内存文件系统)中。通过缓存,Spark避免了RDD上的重复计算,能够极大地提升计算速度。但是,如果缓存丢失了,则需要重新计算。如果计算特别复杂或者计算耗时特别多,那么缓存丢失对于整个Job的影响是不容忽视的。为了避免缓存丢失重新计算带来的开销,Spark又引入检查点(checkpoint)机制。 RDD的缓存和RDD的checkpoint的区别 RDD的缓存是在计算结束后,直接将计算结果通过用户定义的存储级别(存储级别定义了缓存存储的介质,现在支持内存、本地文件系统和Tachyon)写入不同的介质。 而RDD的检查点不同,它是在计算完成后,重新建立一个Job来计算。 为了避免重复计算,推荐先将RDD缓存,这样就能保证检查点的操作可以快速完成。 RDD的checkpoint的处理 在缓存没有命中的情况下,首先会判断是否保存了RDD的checkpoint,如果有,则读取checkpoint。为了理解checkpoint的RDD是如何读取计算结果的,需要先看一下checkpoint的数据是如何写入的。 首先在Job结束后,会判断是否需要checkpoint。如果需要,就调用org.apache.spark.rdd.RDDCheckpointData#doCheckpoint。doCheckpoint首先为数据创建一个目录;然后启动一个新的Job来计算,并且将计算结果写入新创建的目录;接着创建一个org.apache.spark.rdd.CheckpointRDD;最后,原始RDD的所有依赖被清除,这就意味着RDD的转换的计算链(compute chain)等信息都被清除。这个处理逻辑中,数据写入的实现在org.apache.spark.rdd.CheckpointRDD$#writeToFile。 简要的核心逻辑如下: //创建一个保存checkpoint数据的目录 val path = new Path(rdd.context.checkpointDir.get, "rdd-" + rdd.id) val fs = path.getFileSystem(rdd.context.hadoopConfiguration) if (!fs.mkdirs(path)) { throw new SparkException("Failed to create checkpoint path " + path) }//创建广播变量 val broadcastedConf = rdd.context.broadcast( new SerializableWritable(rdd.context.hadoopConfiguration))//开始一个新的Job进行计算,计算结果存入路径path中 rdd.context.runJob(rdd, CheckpointRDD.writeToFile[T](path.toString, broadcastedConf) _)//根据结果的路径path来创建CheckpointRDD val newRDD = new CheckpointRDD[T](rdd.context, path.toString)//保存结果,清除原始RDD的依赖、Partition信息等 RDDCheckpointData.synchronized { cpFile = Some(path.toString) cpRDD = Some(newRDD) // RDDCheckpointData对应的CheckpointRDD rdd.markCheckpointed(newRDD) //清除原始RDD的依赖,Partition cpState = Checkpointed //标记checkpoint的状态为完成 } 至此,RDD的checkpoint完成,其中checkpoint的数据可以通过checkpointRDD的readFromFile读取。但是,上述逻辑在清除了RDD的依赖后,并没有和check-pointRDD建立联系。 那么Spark是如何确定一个RDD是否被checkpoint了,而且正确读取checkpoint的数据呢? 答案就在org.apache.spark.rdd.RDD#dependencies的实现,它会首先判断当前的RDD是否已经Checkpoint过,如果有,那么RDD的依赖就变成了对应的Ch eckpointRDD: privatedefcheckpointRDD: Option[RDD[T]]=checkpointData.flatMap(_.checkpointRDD) final def dependencies: Seq[Dependency[_]] = { checkpointRDD.map(r => List(new OneToOneDependency(r))).getOrElse { if (dependencies_ == null) { //没有checkpoint dependencies_ = getDependencies } dependencies_ } } 理解了Checkpoint的实现过程。 接下来看一下computeOrReadCheckpoint的实现。前面提到了,它一共在两个地方被调用,org.apache.spark.rdd.RDD#iterator和org.apache.spark.CacheManager#getOrCompute。它实现的逻辑比较简单,首先检查当前RDD是否被Checkpoint过,如果有,读取Checkpoint的数据;否则开始计算。 实现如下: private[spark] def computeOrReadCheckpoint(split: Partition, context: TaskContext) : Iterator[T] = { if (isCheckpointed) firstParent[T].iterator(split, context) else compute(split, context) } firstParent[T].iterator(split,context)会调用对应CheckpointRDD的iterator,最终调用到它的compute: override def compute(split: Partition, context: TaskContext): Iterator[T] = { val file=new Path(checkpointPath, CheckpointRDD.splitIdToFile(split.index)) CheckpointRDD.readFromFile(file, broadcastedConf, context) // 读取Checkpoint的数据 } 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5723758.html,如需转载请自行联系原作者

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

Hadoop MapReduce概念学习系列之MPI和MapReduce(十三)

在当前最流行的高性能并行体系结构中比较常用的并行编程环境分为两类:消息传递和共享存储。MPI是基于消息传递的经典代表,是消息传递井行程序设计的标准,用于构建高可靠的、可伸缩的、灵活的分布式应用程消息传递井行处理开销比较大,适合于大粒度的进程级并行计算,相对其他并行编程环境,它具有很好的可移植性,几乎能被所有的并行环境支持;还具有很好的可扩展性,具有完备的异步通信功能,能按照用户的要求很好地分解问题,组织不同进程之间进行数据交换,适合大规模可扩展性的并行算法。MPI模式在学术研究领域应用较多,而在商业领域,云计算系统大多采用的是Google云计算系统中的MapReduce并行编程模型。云计算强调的就是简单的编程模型,而MapReduce就是一种高效的、简单的并行编程模式,也是一种高效的任务调度器。MapReduce这种编程模型不仅适用于云计算,在多核和多处理器、Cell processor以及异构机群上同样有良好的性能。利用MapReduce ,程序员能够轻松地编写紧耦合的程序,在运行时能高效地调度和执行任务,在实现时,在Map函数中指定对各分块数据的处理过程,在Reduce函数中指定如何对分块数据处理的中问结果进行归约。用户只需要指定Map和Reduce函数来编写分布式的并行程序,不需要关心如何将输人的数据分块、分配和调度,同时系统还将处理集群内节点失败及节点间通信的管理等。而MPI仅仅是一个并行计算标准,没有相应的分布式文件系统的支撑,在大数据场景下大文件的存储及访问都会成为一个问题,同时用户还需要考虑集群节点之间的通信协调、容错等问题,这些使得MPI的编程难度比较大,集群本身的规模也很难做到像MapReduce那样的超大规模。 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5080596.html,如需转载请自行联系原作者

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

Spark RDD概念学习系列之RDD是什么?(四)

RDD是什么? 通俗地理解,RDD可以被抽象地理解为一个大的数组(Array),但是这个数组是分布在集群上的。详细见 Spark的数据存储 Spark的核心数据模型是RDD,但RDD是个抽象类,具体由各子类实现,如MappedRDD、 ShuffledRDD等子类。 Spark将常用的大数据操作都转化成为RDD的子类。 官方对RDD的解释是:弹性分布式数据集,全称是Resilient Distributed Datasets。RDD是只读的、分区记录的集合。RDD只能基于在稳定物理存储中的数据集和其他已有的RDD上执行确定性操作来创建。这些确定性操作称为转换,如map、filter、groupBy、join。 RDD不需物化,RDD含有如何从其他RDD衍生(即计算)出本RDD的相关信息(即Lineage),因此在RDD部分分区数据丢失的时候可以从物理存储的数据计算出相应的RDD分区。 这个数据集的全部或部分可以缓存在内存中,在多次计算间重用。 所谓弹性,是指在内存不够时可以与磁盘进行交换。进一步见 细谈RDD的弹性 这设计了RDD的另一个特性:内存计算,就是将数据保存到内存中。同时为了解决内存容量限制问题,Spark为我们提供了最大的自由度,所有数据均可由我们来进行cache的设置,包括是否cache和如何cache。 RDD是基于工作集的应用抽象。 Hadoop MapReduce基于数据集的处理:从物理存储上加载数据,然后操作数据,然后写入物理存储设备。 基于数据集的操作不适应的场景: 1、 不适合于大量的迭代。 2、 交互式查询 重点是,基于数据流的方式,不能够复用曾经的结果或者中间计算结果。 简洁点来说, RDD是弹性分布式数据集的简称,其本身是一个抽象类,其内部实现包括以下五个部分,其中前三个是必备的: getPartitions方法:分区列表(数据块列表) compute方法(计算每个分片的函数) getDependencies方法(对父RDD的依赖列表) partitioner:key-value(键-值)RDD的分区器 getPreferredLocations方法:每个数据分片的预定义地址列表(如HDFS上的数据块的地址) 其中,前三个用于描述RDD间的Lineage信息,后两个可用于优化执行。 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5723446.html,如需转载请自行联系原作者

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

Hadoop MapReduce概念学习系列之shuffle大揭秘(十九)

shuffle是非常重要!一定要深入理解和多实践。 缓存,分组,排序,转发,这些都是mr的shuffle。 Soga 我想得到按流量来排序,而且还是倒序,怎么达到实现呢?这就牵扯到排序的的问题 默认是根据key来排, 我想根据value里的某个排, 解决思路:将value里的某个,放到key里去,然后来排 下面,开始weekend110的hadoop的自定义排序实现 也要修改FlowBean代码 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5713701.html,如需转载请自行联系原作者

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

Hadoop概念学习系列之Hadoop的几点优点(六)

任何软件,特别对于开源软件和系统而言,有优点和缺点,这是再平常不过呢?为什么这么说,开源出来,需要更多人去共同开发和修改,这样,才可以站住开源世界的领先者。 1. 高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。 2. 高扩展性。Hadoop是在可用的计算机集簇间分配数据完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。 3. 高效性。Hadoop能够在节点之间动态地移动数据,以保证各个节点的动态平衡,因为以其处理速度非常快。 4. 高容错性。Hadoop能够自动保存数据的多份副本,并且能够自动将失败的任务重新分配。 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5058178.html,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

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

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应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册