map什么意思中文(map是什么功能)

生活常识 2023-04-22 16:48生活常识www.wozhengxing.cn

  近期新员工入职一个趣味的年青朋友,递交了很多很多的编码。

  打开git纪录一看,原来是用了十分多的java8的英语的语法特点,重新构建了编码。用的数最多的,便是map、flatMap这类的。

  可是别的小伙伴们不愿意了,尽管有些人觉得编码变的非常容易明白了,但有大量的人觉得编码变的很晦涩难懂。

  那觉得就好像脱了裤子放臭屁,多此一举。

  这种涵数的作用域,依据级別,我认为能够 分成三类。真是是无处不在。

  不必太过应用

  我不知道这种涵数是以何时兴起的,但他们与涵数程序编写的关联肯定是十分紧密的。好像是2005年的Scala刚开始的。

  没有什么奇妙的,他们所有是语法糖,功效是给你的程序流程更简约。你如果想,彻底可以用多一点的编码去完成。不必以便耍酷有意去应用,过犹不及,用不太好得话,造成的实际效果会是十分负面信息的。例如java,它并并不是一门涵数计算机语言,那麼lambda就仅仅一种輔助;但你用java那一套去写Lisp编码得话,也总是四不像。

  但語言還是要结合的,由于时尚潮流就这样。不去看看她们身后的设计方案,大家仅从api的词义现象,横着看一下他们所表述的物品。

  大家最先看一下在其中的关联性(留意逻辑性关联性,并不宜全部情景),随后拿好多个典型性的完成,看一下在这个星体上,程序猿们的演出。

  这种抽象性的定义

  这种涵数的功效目标,听说是一种称作流的物品。那流到底是一种什么呢?原谅我用一些不技术专业得话去表述。

  无论是在語言方面還是分布式系统算法设计上,它实际上是一个简易的数字能量数组。它有时真的是一个简易的数字能量数组,有时是存有于几台设备的分布式系统数字能量数组。在下文中,大家通称为数字能量数组流。

  大家简易分成两大类。

  語言方面的例如Java的Stream分布式系统方面的例如Spark的RDD

  他们都是有下列好多个较为关键的点。

  涵数能够 做为主要参数

  C语言自然是一切正常的,能够 把涵数做为表针传到。但在没多久以前,在Java中,这还得绕着弯子去完成(应用java定义中的Class去仿真模拟涵数,你能看到许多Func1、Func0那样怪异的java类)。

  涵数作主要参数,是促使编码越来越简约的一个必备条件。大家一般的程序编写方式,大多数是次序实行一些实际操作。

  array=new Array()array=func1(array)if(func2(array)){ array=func3(array)}array=func4(array)

  而假如涵数可以当主要参数,我也可以尽可能的将实际操作铺平。,還是要译成上边的句子开展实行的。

  array=new Array()array.stream().map(func1).filter(func2).flatMap(func3).sorted(func4)...

  程序编写方式彻底发生变化,涵数也拥有词义。

  sequential parallel

  如果我们的数字能量数组流很大,针对单机版而言,就会有次序解决和并行计算二种方法。

  一般,能够 根据parallel涵数进到并行计算方式。针对大部分当地实际操作,开过并行处理不一定一定会快。

  java中应用ForkJoin那一套,进程的速率,你了解的…

  而针对分布式系统数据流分析而言,原本便是并行处理的,这类主要参数实际意义就并不大了。

  函数种类

  一般功效在数据流分析上的涵数,会分成两大类。

  变换。Transformation姿势。Action

  变换,典型性的特性便是lazy。

  仅有action实行的情况下,才会真实参加计算。,你能觉得这种变换姿势是一套被缓存的实际操作。典型性的涵数如map、flatMap等。他们如同烧烤一样被串在一起,等待被撸。

  姿势。真实开启编码的运作,上边的一系列变换,也会像开过闸的水灾一样,一泻而下。典型性的如reduce涵数,便是这类。

  之上的叙述也不尽然,例如python的map,实行后就可以輸出結果。这令人很丢面子啊。

  map reduce

  提到map和reduce,大伙儿就不谋而合的想起了hadoop。殊不知,它不仅是互联网大数据中的定义。

  针对它俩的定义,大家仅做下边二行详细介绍。

  map

  将传到的涵数先后功效到编码序列的每一个原素,并把結果做为新的数字能量数组流回到。

  reduce

  reduce类似一个递归的定义。会归约成一个值。看一下这一公式计算)

  reduce([p1,p2,p3,p4],fn)=reduce([fn(p2,p4),fn(p1,p3)])

  实际還是看Google的經典论文吧。

  《MapReduce: Simplified Data

  Processing on Large Clusters》

  https://ai.googleesearch/pubs/pub62

  你可以浏览么?:)

  map flatMap

  这两个涵数常常被应用。他们有以下差别

  map

  把数字能量数组流中的每一个值,应用所出示的涵数实行一遍,一一对应。获得原素数量同样的数字能量数组流。

  flatMap

  flat是平扁的含意。它把数字能量数组流中的每一个值,应用所出示的涵数实行一遍,一一对应。获得原素同样的数字能量数组流。只不过是,里边的原素也是一个子数字能量数组流。把这种子数组合并成一个数字能量数组之后,原素数量大概率会和原数字能量数组流的数量不一样。

  程序猿们的演出

  java8种的Stream

  java8刚开始,添加了一个新的抽象性,一个称作流的物品Stream。相互配合lambda英语的语法,能够 使编码变的非常的清新、整洁(有没有发觉都快变成Scala了)。

  一个很好的指导

  https://stackify.com/streams-guide-java-8/

  Spark的RDD实际操作

  spark的关键数据库系统便是RDD,是一个有向无环图。它意味着一个不能变、可系统分区、其中原素可并行处理的结合。

  它是分布式系统的,但大家能看下一个WordCount的事例。

  JavaRDDtextFile=sc.textFile(hdfs://...);

  JavaPairRDDcounts=textFile

  .flatMap(s - Arrays.asList(s.split( )).iterator())

  .mapToPair(word - new Tuple2(word, 1))

  .reduceByKey((a, b) - a b);

  counts.saveAsTextFile(hdfs://...);

  多么的了解的Api啊,你一定在Hadoop里见过。

  Flink 的 DataStream

  Flink程序流程是实行分布式系统结合变换(比如,filtering, mapping, updating state, joining, grouping, defining windows, aggregating)的基本程序流程。Flink中的DataStream程序流程是完成在数据流分析上的transformation。

  大家一样看一下它的一段编码。

  DataStreamtuple2 counts=// split up the lines in pairs (2-tuples) containing: (word,1)text.flatMap(new Tokenizer())// group by the tuple field 0 and sum up tuple field 1.keyBy(0).sum(1);

  kafka stream的实际操作

  kafka早已变成了一个分布式系统的流式计算服务平台。他抽象性出一个KStream和KTable,与Spark的RDD相近,也是有相近的实际操作。

  KStream能够 当作是KTable的版本更新(changlog),数据流分析中的每一个纪录相匹配数据库查询中的每一次升级。

  大家看来下它的一段编码。

  KTablewordCounts=textLines

  .flatMapValues(value - Arrays.asList(value.toLowerCase().split(\\W )))

  .groupBy((key, value) - value)

  .count();

  wordCounts.toStream().to(streams-wordcount-output, Produced.with(stringSerde, longSerde));

  RxJava

  RxJava是一个根据观察者模式的多线程每日任务架构,常常见到会被采用Android开发设计中(服务器端选用的也愈来愈多)。

  RxJava再語言方面开展了一些自主创新,有一部分忠诚的教徒。

  語言方面的lambda

  自然,对Haskell这类与生俱来的涵数计算机语言而言,是自带光环的。但别的的一些語言,包含开发语言,编译程序性語言,也消化吸收了这种工作经验。

  他们通称为lambda。

  Python

  做为最时兴的开发语言,python一样也是有它的lambda英语的语法。最基础的map、reduce、filter等涵数一样是存有的。

  JavaScript

  js也不可以拉掉,例如Array.prototype.()等。它该有的,也都是有了。

  End

  也有好多好多,也不一一列举了。话说,这种涵数能够 专利申请么?我喜欢,尽管我非常少用。

  版权声明本文内容由网友提供,该文观点仅代表作者本人。本站(http://www.cangchou.com/)仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 3933150@qq.com 举报,一经查实,本站将立刻删除。

  版权声明本文内容由作者仓筹提供,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至907991599@qq.com 举报,一经查实,本站将立刻删除。如若转载,请注明出处http://www.cangchou.com/434537.html

Copyright@2015-2025 www.wozhengxing.cn 我整形网版板所有All right reserved -