Scala 在大数据处理方面有何优势?

论坛 期权论坛 期权     
hellocode   2018-9-28 00:21   10748   9
Spark 以及最近听闻的 Flink,都是用 Scala 开发的。想知道,除了 JVM 能够与 YARN 较好集成,函数式语言并发模型优秀之外,Scala 还有适用于此场景的天然优势吗?
分享到 :
0 人收藏

9 个回复

倒序浏览
2#
紫杉  2级吧友 | 2018-9-28 00:21:17
这是一个很好玩的问题。从某种程度而言,Scala是不善于处理大数据的。作为一个函数式语言,必须在内存消耗和性能消耗两者之间徘徊,而普通的命令式语言就并不会有这种问题。举个例子,从数据结构来看,函数式语言要求不能修改原有结构(如果修改了,就不再吻合Immutable这一黄金定律),对于普通的链表(链表List在函数式语言中比数组Array更常见),每当你做一次操作,比如增加元素,删减元素等等,照理说会生成一个新的链表,而非像过程式语言,直接通过指针对链表本身进行修改。为了让操作速度达到与过程式语言类似或者相匹配,函数式语言的天才们发明了很多种不同方法,比如用结构分享(Structural Sharing)的技巧来应付链表,每次操作只记录下那一项特殊操作,而不毁坏或者替代原有链表。对更高级一些的结构,比如哈希图(HashMap),普通命令式语言用哈希列表(HashTable)这种简单的方式来执行,但悲壮的函数式语言就必须依赖于2-3拇指树(2-3 Finger Trie)一类的高端结构来达到相同的操作效率。但虽然速度达到了,占用空间就成了一个问题。当命令式语言通过不停对同一个对象进行修改的同时,函数式语言却不停的生成新内容。所以虽然函数式语言在理论上(无限空间与无限时间),数学上,都是更高档次的语言,但在残酷的现实面前,却有时赶不上命令式语言。离散数学(Discrete Mathematics)中对时间的定义,只把Polynomial(多项式时间)和Exponential(指数级时间)分开,认为多项式时间在宇宙尺度上就已经足够快了,但在争分夺秒的实际程序中,多项式还完全不够,线性(Linear)时间都嫌长。

为了让函数式语言达到函数式语言编程者们心目中“神”一样的地位,无数的东西被发明了出来,全世界第一个编译器就是为Lisp这个函数式语言发明的,这个编译器还自带全世界第一个垃圾处理器(Garbage Collection),第一个实现递归函数(1960年麦卡锡在ACM上发表了论文:《递回函数的符号表达式以及由机器运算的方式,第一部》),发明了树结构,动态类型(Dynamic Typing)——如今JavaScript, Python, Ruby, PHP等都非常依赖的动态类型,甚至还有条件语句。准确而言,现代编程几乎都是由函数式语言奠定的基础,所有命令式语言的高级功能,比如Java的反射,泛型,Java8的Lambda方程,Ruby的宏,全部都是函数式语言的馈赠。所以你想,当在你心目中,这个世界上最牛逼的东西居然内存和效率都拼不过比它挫的语言模式时,函数式的程序员能不恼怒吗?这恼怒带来了两点:1. 死不认账。函数式程序员绝对不会承认它们的语言效率或内存占用 比命令式语言糟糕;2. 拼命改进,最终又为计算机科学做出了无数贡献。

所以说,如果Scala在内存和效率上似乎都不占太多优势(当然,越熟悉Scala,函数式编程能力越强的人,这两点都将不是问题,通过聪明的设计算法,选用正确的数据结构,速度和高效内存利用肯定和命令式语言的程序近似),为什么人们会选择Scala作为大数据的语言?这里涉及到几个原因:

1. Scala 具有很完整又很强大的集合处理能力,准确而言是现代语言中最有优势的一个。Scala拥有庞大而完整的集合类库,比如Set, List, Vector, Tuple, Map,而有效的泛型能让你肆意组合这些类型得到新的类型,比如像这样的类别:List[Map[String, (Int, List[String)]]],这是一个链表,每个链表元素是一个映射,映射中用字符做key,另一个Tuple元组做value(值),这个元组的第一个元素是整数,第二个元素是一个链表,这样的集合在其他语言中不是不可以做到,但很难,想想在Java中定义个三元数组有多么令人恶心,并且让人难以直观理解:ArrayList,并且Java还不支持元组的表达。Scala不仅有函数式语言对集合处理的先天优势:map, fold, zip, foreach, collect, filter等等,还有OOP面向对象语言的辅助函数(比如take(5)可以取得前五个元素,takeRight(5)是最后五个),这点上完虐Lisp或者Haskell这些也许在函数式表达上胜过Scala,但在简单省事以及有工业产出(Industrialized)能力上完全比不上Scala的语言。Scala对集合预制的辅助方法(Helper functions)数量之多甚至超过了Java。同时,Scala还提供immutable(不可变)结构与mutable(可变)结构,让程序员可以在命令式与函数式中自由切换。

2. 物以类聚,人以群分。函数式语言以吸引天才闻名,一直作为“学院派”语言延存至今,麻省理工至今还有一门课专门教Lisp,斯坦福每学期邀请业界的Haskell高手前去讲课。四十年前,最火的研究项目是人工智能,很多聪明人进入了这个领域,所以Lisp成为了人工智能的程序语言首选。如今最火的领域就是大数据,以及数据处理,很多聪明人进入这个领域,他们都在一段时间内被Scala吸引,所以自然就选择Scala作为他们的语言,这和Scala本身适不适合大数据其实并没有太大关系,就跟函数式语言本不擅长从事IO开发(一句著名的谚语说,IO就像一个恐怖的黑盒子,总有一种方法让函数式的美妙失灵),但还有人用Haskell开发服务器一样,对于这些天才而言,你给一袋面粉他们都能造个原子弹,让Scala作为大数据开发语言,完全不是问题。

3. 文章最前面我批评了函数式语言或者Scala的速度问题。但这其实不是问题。当C语言出来的时候,编译器水平并不高,无数写汇编的程序员纷纷斥责C语言速度缓慢,说C语言程序员不是真程序员。当年Java出来时,编译后的程序运行速度也非常慢,一直到Java1.3这个问题才有所好转。实际上,汇编语言的速度 > C语言速度 > Java速度。从这条线可以很明显的看出,越高级的语言速度越慢,Scala作为明显的比Java在进化树上爬的更高的语言,似乎有效率损失或内存管理问题是完全可以被解释的。并且在目前的所有测评中,Scala的速度并不比java慢,内存占用也大致持平。

最后绕回题主的问题上。首先,Flink不是由Scala写的,Flink是由Java写的,只是提供了Scala接口(API)而已。Apache Spark确实是由Scala写的,但Spark最先是由加州伯克利实验室公布的,所以符合我所说的第二点。Scala的威力现在才要先开始显现出来,一堆新的大学实验室开始逐步普及Scala,很多高级库已经开始用Scala写就了,比如经典概率模型建立库Figaro是由Scala写的,由前哈佛大学工程与应用科学部门的副教授Avi Pfeffer发布,贝叶斯图形模型建立库Factorie由马塞诸塞大学(UMass)的Andrew McCullen发布,高效数学计算库Breeze由加州伯克利的David Hall(此人是斯坦福大学本科生)发布。可以看出,Scala必定会成为新一轮高端库的主导语言。

同时,作为普通的大数据处理,诚然Akka Actor模型并不适合直接的文档处理,但最新的Akka-Stream完全可以胜任,Akka-Stream预加载了叫做Backpressure(向后压力)的机能,能有效防止数据过快流入产生的内存过载问题,可以专门来处理数据量大的文档(我用它来处理过约4000万行的文档)。

(这段被诺铁和qiqiqi提醒后修改)Spark也只是用akka做节点控制,数据传输还是实验室的大神们自己写的。
3#
青牛  5级知名 | 2018-9-28 00:21:18
1、现在大规模的数据处理基本都是用spark跑,而spark就是scala语言写的 用scala写的代码和spark无缝衔接。
2、代码简洁,可以函数编程,尤其是数据处理的时候,优势很明显。
如果有java基础的话,学起来会很快。
4#
尚学堂Andy老师  2级吧友 | 2018-9-28 00:21:19
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:李国冬
链接:为什么选择Scala,它在大数据处理方面有何优势? - 琴弦上、漫步 - CSDN博客
来源:CSDN博客

近年来,关于大数据讨论已然是热火朝天,虽不说是家喻户晓,那至少对于业界来说也是引起了轩然大波。作为学生党的我,最近也在研究关于大数据的东东。作为一个技术迷,总是会想尝试一些新鲜的东西。前一段时间学习了Hadoop之后,又想看看Spark是什么东东。那么在这里有必要八卦一下Spark了。
Spark是发源于美国加州大学伯克利分校AMPLab的集群计算平台。它立足于内存计算,从多迭代批量处理出发,兼收并蓄数据仓库、流处理和图计算等多种计算范式,是罕见的全能选手。就大数据集而言,对典型的迭代机器 学习、即席查询(ad-hoc query)、图计算等应用,Spark版本比基于MapReduce、Hive和Pregel的实现快上十倍到百倍。其中内存计算、数据本地性 (locality)和传输优化、调度优化等该居首功,也与设计伊始即秉持的轻量理念不无关系。
那么,天下武功,唯快不破,看到这里当然是以一种很激动的心情想要去学习它了。那么问题也来了,通过百度等各种小道消息打听到,Spark是采用Scala语言设计的,要想学好Spark,Scala这一关必须是要过的,并且像Twitter、Linkedin等这些公司都在用。于是,还能怎么办,学呗。。。
于是,就愉快的开始了Scala之旅,嘿嘿,然后就没有然后了。看了Scala前面的内容还好,看到后面真的是想吐血了,简直是受不了这种编写方式,不仅编译速度慢,而且编写代码过于随意、灵活,完全无法驾驭。于是,进行了内心的各种挣扎,并且还被实验室的几个研究生学长踏雪了一番,我也不能坐以待毙了,因此,我再一次选择了强大的网络,打开搜索引擎,然后查看各种八卦与新闻。以下是搜索到的各种观点。
我想大部分应用开发程序员,最关键是看有什么类库合适的方便特定领域的应用开发。就像ruby有rails做web开发,你可以去论证ruby优缺点,但实际上应用开发效率提升很大程度上依靠类库。
现在Spark是大数据领域的杀手级应用框架,BAT,我们现在几个领域巨头的客户(有保密协议不方便透露)都全面使用Spark了,这个时候再谈Scala适不适合大数据开发其实意义不大。因为大家比的不只是编程语言,而是构建在这个编程语言之上的类库、社区和生态圈(包括文档和数据、衍生类库、商业技术支持、成熟产品等等)。
那么反过来问,为什么Spark会选择Scala可能更有意义一点。Spark主创Matei在不同场合回答两次这个问题,思考的点稍微不一样,但重点是一样的,很适合回答题主的问题。总结来说最主要有三点:
1. API能做得优雅; 这是框架设计师第一个要考虑的问题,框架的用户是应用开发程序员,API是否优雅直接影响用户体验。
2. 能融合到Hadoop生态圈,要用JVM语言; Hadoop现在是大数据事实标准,Spark并不是要取代Hadoop,而是要完善Hadoop生态。JVM语言大部分可能会想到Java,但Java做出来的API太丑,或者想实现一个优雅的API太费劲。
3. 速度要快; Scala是静态编译的,所以和JRuby,Groovy比起来速度会快很多,非常接近Java。
关于Scala性能的问题,主要分两种情况,
1. Scala的基准性能很接近Java,但确实没有Java好。但很多任务的单次执行的,性能损失在毫秒级不是什么问题;
2. 在大数据计算次数很多的情况下,我们全部写成命令式,而且还要考虑GC,JIT等基于JVM特性的优化。
Scala很难是个很含糊的问题,关键是要看你想达到什么目的。
我们培训客户做Spark开发,基本上一两个星期就可以独立工作了。
当然师傅领进门,修行靠个人,一两个星期能独立工作不代表能马上成为Scala或Spark专家。
这里回答主要针对大数据产品应用开发,不是大数据分析。大数据分析是个更泛的话题,包括大数据分析实验和大数据分析产品等。实验关心建模和快速试不同方式,产品关心稳定、可拓展性。大数据分析实验首选R(SAS),python和Matlab, 通常只拿真实数据的一小部分,在一个性能很好的单机上试各种想法。Scala目前在大数据分析实验上没有太多优势,不过现在有人在做R语言的Scala实现,可以无缝和Spark等大数据平台做衔接。当然现在也已经有SparkR了,可能用R和Spark做交互。
Scala是一门现代的多范式编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala允许用户使用命令和函数范式编写代码。Scala运行在Java虚拟机之上,可以直接调用Java类库。对于新手来说,Scala相对比较复杂,其看起来灵活的语法并不容易掌握,但是对于熟悉Scala的用户来说,Scala是一把利器,它提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构。近日,Spotify的软件工程师Neville Li发表了一篇题为《数据工程师应该学习Scala的三个理由》的文章,他认为现在的编程语言种类非常多,每种语言都各有优缺点,并且它们的适用的场景也不同,比如Scala就非常适合用于数据处理和机器学习。
在大数据和机器学习领域,很多开发者都有Python/R/Matlab语言的背景,相比与Java或者C++,Scala的语法更容易掌握。从以往的经验来看,只要掌握基本的集合API以及lambda,一个没有经验的新员工就可以快速上手处理数据。像Breeze、ScalaLab和BIDMach这样的类库都通过操作符重写模仿了一些流行工具的语法以及其它的一些语法糖,简单并且容易使用。另外,Scala的性能比传统的Python或者R语言更好。
由于Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序,所以Scala可以和大数据相关的基于JVM的系统很好的集成,比如基于JVM类库的框架Scalding(Cascading)、Summingbird(Scalding和Storm)、Scrunch(Crunch)、Flink(Java编写并有Scala的API),本身使用Scale开发的系统Spark、Kafka。另外,很多数据存储解决方案都支持JVM语言,比如Cassandra、HBase、Voldemort和Datomic。
函数编程范式更适合用于Map/Reduce和大数据模型,它摒弃了数据与状态的计算模型,着眼于函数本身,而非执行的过程的数据和状态的处理。函数范式逻辑清晰、简单,非常适合用于处理基于不变数据的批量处理工作,这些工作基本都是通过map和reduce操作转换数据后,生成新的数据副本,然后再进行处理。而大多数的Scala数据框架都能够把Scala数据集合API和抽象数据类型相统一,比如Scalding中的TypedPipe与Spark中的RDD都有相同的方法,包括map、flatMap、filter、reduce、fold和groupBy,这样使用Scala来处理就更为方便。开发者只需要学习标准集合就可以迅速上手其它工具包。另外,很多的类库都参考了范畴论中的一些设计,它们通过使用semigroup、monoid、group标识来保证分布式操作的正确性。


5#
大数据二三事  4级常客 | 2018-9-28 00:21:20
谢邀

回答你的问题之前,我查了下过去的问题,发现这个回答很全面。观点整理自网友  @紫杉 版权归他所有。

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:紫杉
链接:Scala 是一门怎样的语言,具有哪些优缺点? - 紫杉的回答
来源:知乎

首先,Scala不把程序员当傻子。当马丁·奥德斯基宣布Scala 2.12(http://www.scala-lang.org/news/roadmap-next)将要简化语法,推出Scala "Don Giovanni"项目的时候,在视频中说的很清楚:“Scala现在是为聪明人创造的,以后也是为聪明人服务的。”所以不同于Python让程序员用一种方法做所有事情,Scala提供一整套工具,让程序员自由选择,无论是mutable数据结构,immutable数据结构,并行(parallel)数据结构。然后在这些选择中,Scala再针对他们进行算法层面的特殊优化。Scala相信程序员的聪明才智,让程序员自行选择合适的结构,以针对变化万千的任务需求,这点是Scala做得极好的地方。

再者,有人会说immutable数据结构占用内存,或者速度很慢。这是真的,但这不是Scala的错,而是这些结构就是这样定义的。可以看看这个视频:Parleys.com | Courses 这里讲的是Scala集合的运行速度,是一个来自Goldman Sachs的程序员讲他们为Java写的集合库(GSCollection)速度和内存消耗,但同时比较了gs-collection(goldmansachs/gs-collections · GitHub),Java,和Scala库的速度。最后Scala的可变集合mutable原生库完爆Java,和gs-collection基本持平。

Scala的第二个优势,相较于Java而言,则是相信程序员的优化能力。在Scala with Style讲话中(https://www.youtube.com/watch?v=kkTFx3-duc8),马丁·奥德斯基说:“很多程序员会告诉我,他们一般会重构他们的Scala代码两三次,甚至三四次。”这听起来似乎非常的没有效率,但Scala就是这样的语言,每一次重构,代码的性能或者是可读性都会有极高的提升。

之前就有人提到过,Scala新手和老手写出来的代码完全会呈现两种不同的风格,甚至新人根本不能读懂有经验的Scala程序员所写的代码,有人于是戏称:“太好了,这样的话我们部门的实习生就不能乱碰我写的代码啦!”但其实不仅风格不同,执行效率差距也一定是巨大的。Scala提供一整套工具,但是要明白什么时候用拿一种工具,哪些算法能够随意调用,哪些算法不能,这一定要依靠经验、研究和学习以及对源代码的理解才能得知。最简单的例子,Scala的foreach()方法是高度优化过了的(尤其针对Range结构和Vector结构),但是fold()就不一定了。或者当受到诱惑想用zipWithIndex()的时候,一定要明白这是两次循环,最好改用Vector(...).indices.foreach()的方法,或者用.view来推迟执行。

像这样的地方还有很多。所以在这个层面上来讲,简直和C++非常的相似。从另外一个层面来讲,不仅仅是要理解语言层面的优化,Scala作为一个社区而言,是非常追求运行速度的。Ruby社区就完全不同了,Ruby曾经是推特的主要语言。推特的团队找到了Ruby团队,说,你们能不能让Ruby运行的快一点,我们有这个这个和这个建议。Ruby直接把这些建议拒绝了,因为它们会增加语言复杂度,让Ruby不能继续做一个“fun”(好玩)的语言。而Python直接就立志做一个“Simple”(简单)的语言了。于是推特只好将后台换做Scala和Java的结合。有一位在推特工作的知乎友人在我的一个回答下留言说推特换用Scala后,TypeSafe(Scala的母公司)还送去了一个蛋糕。

为了追求速度,Scala社区是绝对不会管所谓的“简单”或者是“好玩”,怎样有效率就怎样弄。与其专注于JVM的改进,Scala社区大部分在编译器上下功夫,比如很著名的Miniboxing(Miniboxing),这是一个编译器增进器。Miniboxing做的是什么呢?只做一件事:防止auto-boxing和auto-unboxing。所有的泛型,尤其是原生类泛型(Primitive Types),诸如Int、Double等等,在进行各种操作的时候会自动取出和装回它们所属的类中去——这个我解释的不太好,但是可以看这里(Java 自动装箱与拆箱(Autoboxing and unboxing))。

Miniboxing这样的插件可以让所有的原生类泛型再也不用自动装拆箱,从而将Scala的运行速度提升1.5倍到22倍(Miniboxing)。当然这样的东西可不是白来的,这是马丁·奥德斯基的PhD博士学生做的一个研究项目,然后为OOPSLA写了一篇论文(Miniboxing),所以怪不得这玩意Scala可以有,但其他语言想要有都没有。

另一个Scala的很大优势就是所谓的Macro——宏。宏本身作为元编程而言,其实和运行速度是没有什么太大关系的,反而,因为对反射(Reflect)的利用,可能会影响到速度。但Scala社区对宏的理解显然和最初的设计理念有偏差。因为Scala本身是没有传统意义的循环的(for-loop),所以很多时候循环必须利用while或者foreach。但是部分追求效率的Scala程序员们利用宏为Scala写了一个传统循环,叫做cfor,被收录在Spire(non/spire · GitHub)数学计算库中。cfor的写法如下:
  1. import spire.syntax.cfor._// print numbers 1 through 10cfor(0)(_ < 10, _ + 1) { i =>  println(i)}
复制代码
而这玩意运行效率如何呢?https://www.chrisstucchio.com/blog/2014/learning_spire_cfor.html 文章中做了一次测评,将cfor和zip写的一个算法作比较——在公布结果之前,我想说的是,zip并不是一个高度优化的方法,所以本身就慢很多,cfor用了26.1毫秒运行,zip方法用了7.4 秒运行,这几乎是284倍的速度差距。

通过这两点,Scala的一个优势就很明显了——多样化。当需要写简单的代码,像Python一样当脚本语言使用时,Scala提供大量的原生方法和数据结构,可以很轻松的写出比较复杂的操作。但当需要速度的时候,又可以通过重构来获取数十倍或者上百倍的速度提升。通过Miniboxing一类的编译器增强器,Scala在某些操作的速度是必定超过Java的。

Scala的第二个优势就是——一帮勤劳勇敢的PhD博士生。二十一世纪的程序语言和二十世纪的程序语言已经不能比拟了。那个年代的普通人(甚至是学生)还能任意发明一下语言,稍微把编译器优化几次就能上得了厅堂(比如那一大堆Lisp方言),到了这个年代,编译技术已经达到了很复杂的程度(虚拟机技术也是如此),优化和语义理解,程序语言的定义与延展,再也不是随便任何人都能搞定的工作了。作为编程语言方面的教授,马丁·奥德斯基不断的将最前沿的学术界成果转移到Scala这个语言中,还让他的博士学生发展出新的,让语言运行得更快的方法,这些都是其他语言,尤其是Python、Ruby、甚至是Go都没有的优势。

当然,说了这么多,总会有人说了,Scala如果像C++一样难,又追求速度的话,为什么不直接去学C++,原因很简单——现在有很多在JVM上面写成的软件啊!大家又不是Haskell程序员,压根不打算一切自己写呐。

算是借花献佛,关注大数据欢迎加我微信 idacker
6#
周琦  3级会员 | 2018-9-28 00:21:21
下面是个人查看一些资料的总结:

现在很多数据处理用的是python或R, 那么现在我们对比下scala和python在大数据处理方面的优劣:
  • scala与python对比
      scala 相对于c语言慢2-3倍,但是python一般比c语言慢50倍。(只是大概,实际会情况不同)
    • scala 缺少python那样丰富的数据处理,机器学习的包(Numpy, scipy, matplotlib,panda, scikit-learn)。当然scala也有自己的包(MLibBreeze, ScalaLab and BIDMach),只不过现对于python不够成熟,丰富
    • python不是为大数据设计的,scala可以说是大数据导向的, 例MLlib相对于scikit-learn的算法数目较少,但是它是天生适合大数据并行计算的。
    • scala,python都是面向对象语言。scala也支持函数式(functional programming)编程,而pyton不支持,python的编程风格也因人而异
    • 更多细节对比Scala vs. Python comparison
下面单独谈谈scala的一些优势:
  • scala的优势
      基于JVM与JAVA的生态系统, 可方便利用现有的基于JVM的成熟应用如:HADOOP,Flink,Kafka. 另外Spark也是基于scala写的
    • 强大的并发性(Concurrency)
    • 支持函数式编程
    • 更好支持分布式系统
以前用python比较多,初学SPARK,也跟着学了scala,文中观点基本参考下面的文献,后面学习如果有了新的心得,继续补充
参考:
https://www.hakkalabs.co/articles/three-reasons-data-eng-learn-scala
Why we love Scala at Coursera
Scala vs Python

转自自己博客大数据工程师为什么要学习scala
7#
曾建新  2级吧友 | 2018-9-28 00:21:23
scala在大数据处理方面的优势是spark
8#
李东恒  2级吧友 | 2018-9-28 00:21:24
很多回答都混淆了“大数据(Big Data)”和“数据分析(Data Analysis/Data Science)”。
“大数据”的重点在于“大”,它的侧重于利用有限的资源高效的处理大量的数据。它需要借助高并发、分布式等特性,来应对数据量所产生的压力。而函数式编程模型由于其无副作用等特性对并发非常友好。所以大数据的编程框架多以函数式编程语言为模型,比如基于Scala的Spark。
“数据分析”重点在“分析”。它的重点在于对数据进行建模(各种各样的建模大赛就是数据分析范围),而数据量则不大,基本上可以在一台设备下完成。这时编程语言需要具有很好的表达数学模型的能力,这时Python,R一类就占优势。
简单来讲,“数据分析”的工作是“确定算法”,“大数据”的工作是“(利用分布式等技术)高效地实现算法”。
举个例子。假如我们要通过微博分析用户对某某电影的喜爱程度。首先,我们需要一个模型去判断一条微博是否关于某某电影,以及对其态度。这时,我们就需要从微博中抽样,然后用一些机器学习等算法训练出一个模型来进行判断,这部分就是数据分析,可以用Python完成。
接着,我们需要对近期的大量微博进行统计。此时我们面对的是大量的数据,需要使用分布式计算。这时,我们就要用Scala和Spark实现之前训练出来的模型,对大量的微博数据计算其喜爱程度,最终得到一个结果数据。
最后,我们对这个结果进行分析,得到最终的结果,这就又是数据分析了。
9#
大猫  2级吧友 | 2018-9-28 00:21:25
1,处理集合很方便,节约代码.
2,能当脚本语言用.
10#
冬雪  2级吧友 | 2018-9-28 00:21:26
能来歪下楼吗?

对于纯应用来说,Scala比起python对于正常程序员(非java背景)的优势在哪些方面呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP