Traversable vs Iterable Traversable, Iterable 都是trait。 Iterable 继承 Traversable。 Traversable: 支持foreach. Iterable: 支持Interator方法。 Immutable vs mutable Scala的Collection有Immutable和mutable两个大家族。 Immutable: 不可变。初始化后不会发生变化。scala的默认collections。性能更好。 Mutable:
所有集合的根是Iterator,它提供了一组公共方法,可以用来迭代处理和管理集合数据。
Monoid是数学范畴理论(category theory)中的一个特殊范畴(category)。不过我并没有打算花时间从范畴理论的角度去介绍Monoid,而是希望从一个程序员的角度去分析Mo
1.集合操作练习 //创建一个List val lst0 = List(1,7,9,8,0,3,5,4,6,2) //将lst0中每个元素乘以10后生成一个新的集合 lst0.map(x => x*10 ) OR lst0.map(_*10 ) //将lst0中的偶数取出来生成一个新的集合 lst0.filter(x => x%2==0) lst0.filter(x => x%2==0).map(_*5) //将lst0排序后生成一个新的集合 lst0.sorted lst0.sortBy(x => x
Set 特性 不重复、无序 不可变set 创建Set& apply方式创建 val set=Set[Int](1,2,3,4,5) 查看setApi 进入 scala $ scala Welcome to Scala 2.12.10 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_172). Type in expressions for evaluation. Or try :help. scala> val set=Set[Int](1,2,3,4
大数据框架(处理海量数据/处理实时流式数据) 一:以hadoop2.X为体系的海量数据处理框架 离线数据分析,往往分析的是N+1的数据 - Mapreduce 并行计算,分而治之 - HDFS(分布式存储数据) - Yarn(分布式资源管理和任务调度) 缺点: 磁盘,依赖性太高(io) shuffle过程,map将数据写入到本次磁盘,reduce通过网络的方式将map task任务产生到HDFS - Hive 数据仓库的工具 底层调用Mapreduce impala - Sqoop 桥梁:RDBMS(关系型数据库)- > HDFS/Hive HDFS/Hive -> RDBMS(关系型数据库) - HBASE 列式Nosql数据库,大数据的分布式数据库 二:以Storm为体系的实时流式处理框架 Jstorm(Java编写) 实时数据分析 -》进行实时分析 应用场景: 电商平台: 双11大屏 实时交通监控 导航系统 三:以Spark为体系的数据处理框架 基于内存 将数据的中间结果放入到内存中(2014年递交给Apache,国内四年时间发展的非常好) 核心编程: Spark Core:RDD(弹性分布式数据集),类似于Mapreduce Spark SQL:Hive Spark Streaming:Storm 高级编程: 机器学习、深度学习、人工智能 SparkGraphx SparkMLlib Spark on R Flink
方法可以定义多个参数列表,当使用较少的参数列表调用多参数列表的方法时,会产生一个新的函数,该函数接收剩余的参数列表作为其参数。这被称为柯里化。
不可变List 不可变List的创建: 通过apply方法创建: List[元素类型](初始元素,...) val list=List[Int](1,2,3,4,5,6,7,8,9,10) 通过 :: 方法创建: 初始元素 :: 初始元素 :: ... :: Nil/不可变List val list=1::2::3::4::5::6::7::8::9::10::Nil Nil相当于一个空的List,Nil与不可变List的关系类似Null与String的关系,使用Nil给不可变List赋予初始值的时候
Option 是一个表示有可能包含值的容器。 Option 本身是泛型的,并且有两个子类: Some[T] 或 None
第十一章 数据结构(下)-集合操作11.1 集合元素的映射-map11.1.1 map 映射函数的操作11.1.2 高阶函数基本使用案例1+案例211.1.3 使用 map 映射函数来解决11.1.4 模拟实现 map 映射函数的机制11.1.5 课堂练习11.2 集合元素的扁平-flatMap11.3 集合元素的过滤-filter11.4 集合元素的化简-reduce11.5 集合元素的折叠-fold11.6 集合元素的扫描-scan11.7 集合的综合应用案例11.8 集合的合并-zip11.9 集合的迭代器-iterator11.10 流-Stream11.11 视图-view11.12 线程安全的集合11.13 并行集合11.14 操作符第十二章 模式匹配12.1 match12.2 守卫12.3 模式中的变量12.4 类型匹配12.5 数组匹配12.6 列表匹配12.7 元组匹配12.8 对象匹配12.9 变量声明中的模式12.10 for表达式中的模式12.11 样例(模板)类12.12 case 语句的中置(缀)表达式12.13 匹配嵌套结构12.14 密封类
Traversable 遍历 Iterable 迭代 Set无序集合 Sequence序列 Map映射
在scala中可以方便的实现异步操作,这里是通过Future来实现的,和java中的Future很相似,但是功能更加强大。
摘 要 基于Scala Acotor实现多线程单词统计(WordCount) package com.itunic.scala import scala.io.Source import scala.actors.{Actor, Future} import scala.collection.mutable /** * Created by itunic.com on 2016/12/9. */ class WordCountActor extends Actor { override d
Map 集合 Scala中的Map和Java类似,也是一个散列表,它存储的内容也是键值对(key-value)映射,Scala中不可变的Map是有序的,可变的Map是无序的。 不可变Map 创建不可变Map val map=Map("a"->1,"b"->2,"c"->3) 或者 val map=Map(("a",1),("b",2),("c",3)) 更或者混合使用 val map=Map(("a",1),"b"->2,"c"->3) 只有是二元元组就可以。 支持的Api scala> map. +
在上一篇集合的分享中,讲解了Scala中集合的基本概述以及常用集合的基本操作,本次住要分享Scala中集合更高级的操作。
本文将简述Flink SQL / Table API的内部实现,为大家把 "从SQL语句到具体执行" 这个流程串起来。并且尽量多提供调用栈,这样大家在遇到问题时就知道应该从什么地方设置断点,对整体架构理解也能更加深入。
在Laravel中经常需要对一个对象,经过多个中间层处理后,才到真正处理的函数,Laravel将这种常用操作抽象出来,叫做Pipeline
《基于Actor的响应式编程》计划分为三部分,第一部分剖析响应式编程的本质思想,为大家介绍何谓响应式编程(Reactive Programming)。第二部分则结合两个案例来讲解如何在AKKA中实现响应式编程。第三部分则是这个主题的扩展,在介绍Reactive Manifesto的同时,介绍进行响应式编程更为主流的ReactiveX框架。本文是第二部分的第二个案例。 MapReduce是更好地利用并行计算资源来提升数据处理能力的重要算法,如今已被主流的大数据分析平台实现,成为了大数据批量处理的主力军。利用前
除了上面的写法,arr1 ++ arr2 也可以写成 arr1.++(arr2),只是上面的方式更简洁。
这篇文章总结一下我在学习spark sql源码时,曾经纠结过的一些scala语法。
该文章介绍了如何使用Monoid类型进行并行计算和并行序列化。首先介绍了Monoid的概念,以及如何使用Scalaz库中的Monoid类型进行并行计算。然后介绍了如何使用Monoid类型进行并行序列化,并提供了几个例子。最后还介绍了如何使用Monoid类型进行并行处理,并提供了几个例子。
有同学不会scala,从网上找了免费的scala视频,链接已经放在了知识星球的置顶帖,下周要跟的同学,得提前看看
Scalaz是个通用的函数式编程组件库。它提供的类型、函数组件都必须具有高度的概括性才能同时支持不同数据类型的操作。可以说,scalaz提供了一整套所有编程人员都需要的具有高度概括性的通用函数,它
scala> val a = println("ddd") ddd a: Unit = ()
按照Erik的介绍,我们可以把Promise当作装载Future对象的邮箱/容器。
高阶函数通常来讲就是函数的函数,也就是说函数的输出参数是函数或者函数的返回结果是函数。在Scala中函数是一等公民。
sorted sortBy(func: 集合元素类型 => B) sortBy里面的函数也是针对集合每个元素进行操作 sortBy后续是根据函数返回值进行排序
如果使用 AkkaHttp 作为 STTP 的 backend 来并发地处理 list of url,就会得到类似 List[Future[Response[Either[ResponseError[io.circe.Error], T]]]],这样的结果。
在前面几次讨论中我们介绍了Free是个产生Monad的最基本结构。它的原理是把一段程序(AST)一连串的运算指令(ADT)转化成数据结构存放在内存里,这个过程是个独立的功能描述过程。然后另一个独
在 Java 8 中使用函数式编程生成字母序列是一个很大的挑战。Lukas Eder 愉快地接受了这个挑战,他将告诉我们如何使用 Java 8 来生成ABC的序列——当然,肯定不是一种蹩脚的方式。
继续上一期的话题,介绍Scala有别于Java的特性。说些题外话,当我推荐Scala时,提出质疑最多的往往不是Java程序员,而是负责团队的管理者,尤其是略懂技术或者曾经做过技术的管理者。他们会表示这样那样的担心,例如Scala的编译速度慢,调试困难,学习曲线高,诸如此类。 编译速度一直是Scala之殇,由于它相当于做了两次翻译,且需要对代码做一些优化,这个问题一时很难彻底根治。 调试困难被吐槽得较激烈,这是因为Scala的调试信息总是让人难以定位。虽然在2.9之后,似乎已有不少改进,但由于类型推断等特性的
朋友多年自主研发的flink-sql 流计算可视化 UI 平台,细细品味一番确实很好用,做到真正的MSP(混合云场景)多数据多复用的情况实现,下面是这个产品的使用说明看看大家有没有使用场景。
泛函编程方式其中一个特点就是普遍地使用递归算法,而且有些地方还无法避免使用递归算法。比如说flatMap就是一种推进式的递归算法,没了它就无法使用for-comprehension,那么泛函编程
Scala是以JVM为运行环境的面向对象的函数式编程语言,它可以直接访问Java类库并且与Java框架进行交互操作。
在上一节我们介绍了Monad。我们知道Monad是一个高度概括的抽象模型。好像创造Monad的目的是为了抽取各种数据类型的共性组件函数汇集成一套组件库从而避免重复编码。这些能对什么是Monad
ThoughtWorks的「TW洞见」在4月发布了对Scala之父Martin Odersky的访谈。Odersky的回答显得言简意赅,仔细分析,仍然能从中收获不少隐含的信息(虽然可能是负面的信息)。 提问的中心主要是语言之争。Scala是一门极具吸引力的语言,似乎天生具备一种气质,轻易能够吸粉,但招黑的能力也不遑多让。它似乎是从象牙塔里钻研出来的,但又在许多大型项目和产品中得到了实践。有人转向了她,又有人之后背弃了它。如果说Ruby的助力是Rails,那么推动着Scala在社区中成长的,其实到处可见Spa
当你找到大数据项目,你首先会怎么做?确定这个项目的问题领域,确定这个项目的基础设施,在往上,确定项目的框架,选择最适合用来处理当前数据的所有内容。这个时候唯一摆在你面前的难题就是,这个项目到底该使用哪种语言。如果整个团队上下都只会一种语言,那么这个问题就简单了:可惜现实中不会出现这种情况。 我们在这个问题上面临很多的选择,这就让选择一门语言成为了一件难事。为了缩小本文的讲解范围,我们就从如今数据处理应用最广泛的语言R、Python、Scala来入手,加上企业应用比较多的Java好了。 在选择语言时,首先
问题导读 1.你认为map函数可以做哪些事情? 2.hadoop中map函数与Scala中函数功能是否一致? 3.Scala中reduce函数与hadoop中reduce函数功能是否一致? spark用的Scala编写的。因此这里的map和reduce,也就是Scala的map和reduce。scala 有很多函数,而且很方便。这里想写下map和reduce函数,也是看到一篇帖子,感觉Scala非常有意思。 map函数 map函数,你可以往里面放一些,在其它语言中的匿名函数。 源数据:(“人名”,
各元素在 RDD 中出现的次数 返回{(key1,次数),(key2,次数),…(keyn,次数)} scala
学习函数式编程初衷是看到自己熟悉的oop编程语言和sql数据库在现代商业社会中前景暗淡,准备完全放弃windows技术栈转到分布式大数据技术领域的。但是在现实中理想总是不如人意,本来想在一个规模较小的公司展展拳脚,以为小公司会少点历史包袱,有利于全面技术改造。但现实是:即使是小公司,一旦有个成熟的产品,那么进行全面的技术更新基本上是不可能的了,因为公司要生存,开发人员很难新旧技术之间随时切换。除非有狂热的热情,员工怠慢甚至抵制情绪不容易解决。只能采取逐步切换方式:保留原有产品的后期维护不动,新产品开发用一些新的技术。在我们这里的情况就是:以前一堆c#、sqlserver的东西必须保留,新的功能比如大数据、ai、识别等必须用新的手段如scala、python、dart、akka、kafka、cassandra、mongodb来开发。好了,新旧两个开发平台之间的软件系统对接又变成了一个问题。
转载自:https://blog.csdn.net/t1dmzks/article/details/70667011
有一个大数据项目,你知道问题领域(problem domain),也知道使用什么基础设施,甚至可能已决定使用哪种框架来处理所有这些数据,但是有一个决定迟迟未能做出:我该选择哪种语言?(或者可能更有针对性的问题是,我该迫使我的所有开发人员和数据科学家非要用哪种语言?)这个问题不会推迟太久,迟早要定夺。 当然,没有什么阻止得了你使用其他机制(比如XSLT转换)来处理大数据工作。但通常来说,如今大数据方面有三种语言可以选择:R、Python和Scala,外加一直以来屹立于企业界的Java。那么,你该选择哪种语言
上节我们讨论了Zipper-串形不可变集合(immutable sequential collection)游标,在串形集合中左右游走及元素维护操作。这篇我们谈谈Tree。在电子商务应用中对于xm
def reduce[A1 >: A](op: (A1, A1) ⇒ A1): A1
折叠算法是List的典型算法。通过折叠算法可以实现众多函数组合(function composition)。所以折叠算法也是泛函编程里的基本组件(function combinator)。了
//创建一个List val list0 = List(1,7,9,8,0,3,5,4,6,2) //将list0中每个元素乘以10后生成一个新的集合 //将list0中的偶数取出来生成一个新的集合 //将list0排序后生成一个新的集合 //反转顺序 //将list0中的元素4个一组,类型为Iterator[List[Int]] //将Iterator转换成List //将多个list压扁成一个List val
很多知识星球球友问过浪尖一个问题: 就是spark streaming经过窗口的聚合操作之后,再去管理offset呢?
问题导读 1.读取日志的过程中,发生异常本文是如何解决的? 2.读取后,如何过滤异常的记录? 3.如何实现统计点击最高的记录? 日志分析实战之清洗日志小实例5:实现获取不能访问url http
Scala是一门现代的多范式编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala允许用户使用命令和函数范式编写代码。Scala运行在Java虚拟机之上,可以直接调用Java类库。对于新手来说,Scala相对比较复杂,其看起来灵活的语法并不容易掌握,但是对于熟悉Scala的用户来说,Scala是一把利器,它提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构。近日,Spotify的软件工程师Neville Li发表了一篇题为《数据工程师应该学习Scala的三个理由》的文章,他认为现在的编程语言种类非常多,每种语言都各有优缺点,并且它们的适用的场景也不同,比如Scala就非常适合用于数据处理和机器学习。
算子(Operator)将一个或多个 DataStream 转换为新的 DataStream。程序可以将多个转换组合成复杂的数据流拓扑。
领取专属 10元无门槛券
手把手带您无忧上云