写点什么

Scala 更适合用于大数据处理和机器学习

2014 年 10 月 20 日

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 标识来保证分布式操作的正确性。

2014 年 10 月 20 日 05:539961
用户头像
郭蕾 做有意思的事情!

发布了 210 篇内容, 共 109.6 次阅读, 收获喜欢 30 次。

关注

评论

发布
暂无评论
发现更多内容

听保洁老大爷讲Java的垃圾回收

侯树成

JVM

自动化测试框架知识,读这一篇就够了!

禅道项目管理

程序员 DevOps 自动化 测试

最新Idea 2020.1 二种方法激活教程

公众号:V5codings

intellij-idea

docker安装mysql5.7并挂载目录到本地

桥哥技术之路

Docker

嵌套文件夹复制实现

Howe

Java 文件复制

python 文章中图片下载

Flychen

聊聊“坚持”这件事

小天同学

个人成长 写作 坚持 自控力

高仿瑞幸小程序 03 创建轮播图

曾伟@喵先森

小程序 微信小程序 前端 移动

2020年程序猿必读10本好书推荐

ABC实验室

学习 2020 程序员 好书推荐

Flutter Andorid真机或打包APK杂症记录

北风烈

flutter 打包APK

C语言程序的基本结构

C语言技术网-码农有道

C/C++

Linux-常用命令

Flychen

Linux

NumPy 运算规则总结

张利东

Python

我的工作原则与思考

梁帅

互联网 工作效率 原则

从全国首起暗网案件告破说起——暗网,超乎你想象

石君

网络安全 暗网 洋葱网络

Grafana+Prometheus(InfluxDB)+Jmeter使用Nginx代理搭建可视化性能测试监控平台

软测小生

Grafana Prometheus Influxdb Jmeter 性能测试

当我们说文本编辑器时,到底在说什么

潘浩腾 Peter H. Pan

写作平台 InfoQ markdown

Kafka系列第5篇:一文读懂消费者背后的那点"猫腻"

z小赵

大数据 kafak 实时计算

C语言数据类型

C语言技术网-码农有道

游戏夜读 | 游戏数据分析师

game1night

tcp_tw_recycle 【坑】

孤星可

TCP 服务端

使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (二)为什么要写单元测试

编程道与术

编程 编程语言 TDD 代码审查 单元测试

freecplus框架,Linux平台下C/C++程序员提高开发效率的利器

C语言技术网-码农有道

告别手写,一键生成 Helm Chart README

郭旭东

Kubernetes Helm

自助设备系列——上下游

孙苏勇

产品 行业资讯 智能设备

我是如何读完技术书,然后忘得一干二净的

ayesd

读书 读书方式

为什么公众号订阅没有「分组」的功能?

Fenng

微信公众平台 产品设计

5G来临,我们该如何打造自己的家庭数据中心基础篇

ABC实验室

5G 数字资产 家庭数据中心

有没有什么上古的程序代码至今依然没被更替?

极客时间

编程 程序员 开发

2020版Kubernetes快速上手指南,让你所见即所得

ABC实验室

Kubernetes 容器 云原生 群集安装 新手指南

给程序员的错误找个台阶

曲水流觞TechRill

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

Scala更适合用于大数据处理和机器学习-InfoQ