R、Python、Scala、Go、Julia编程语言的比较

2018-10-2220:21:37编程语言入门到精通Comments17,743 views字数 2025阅读模式

R语言

R语言主要用于统计分析、绘图、数据挖掘,可在多种平台下运行,包括UNIX、Windows和MacOS。R主要是以命令行操作,也有图形用户界面支持。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

R语言优点:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

具有包括神经网络、非线性回归模型、系统、绘图和几乎所有数量和统计应用功能的开源开发包。
具有全面的、内置的统计功能和方法,擅长处理矩阵代数。
优秀的数据可视化功能。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

R语言缺点:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

不是一种快速语言,并且没有很好的通用性,虽然对于统计和数据科学而言R语言是一个很好的选择,但是对于通用编程而言并不友好。
R语言的一些不寻常的特点和大多数的语言相比显得有些古怪,譬如:从1开始索引,使用多个赋值操作符,非常规的数据结构。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

Python

Python在学术界一直很流行,尤其是在自然语言处理(NLP)领域。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

Python有面向神经网络的Theano和Tensorflow,有面向机器学习的scikit-learn,以及面向数据分析的NumPy和Pandas。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

有Juypter/iPython这种基于Web的笔记本服务器框架让你可以使用一种可共享的日志格式,将代码、图形以及几乎任何对象混合起来。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

Python往往在大数据处理框架中得到支持,但与此同时,它往往又不是“一等公民”。比如说,Spark中的新功能几乎总是出现在Scala绑定的首位,可能需要用PySpark编写面向那些更新版的几个次要版本(对Spark Streaming/MLLib方面的开发工具而言尤为如此)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

Python是一种动态类型语言,这意味着类型错误经常是不可预料的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

对于特定的统计和数据分析目的,R的大量包使它比Python更具优势。对于通用语言,更快更安全的Python稍有优势。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

Scala

Scala是一种能够运行在JVM上的语言。它是一种多范型语言,支持面向对象和函数式编程。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

优点:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

当使用集群计算来处理大数据时,Scala + Spark是极好的解决方案。
Scala能够编译成java字节码运行在JVM上。这使的Scala成为了一种强大的通用语言,同时也非常适合数据科学。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

缺点:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

语法和类型系统通常过为复杂。
如果没有那么多的数据需要处理时,使用其他语言(如R或Python)可能会是一个更好的选择。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

Go

Go(Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

与C++相比,Go语言并不包括如异常处理、继承、泛型、断言、虚函数等功能,但增加了 Slice 型、并发、管道、垃圾回收、接口(Interface)等特性的语言级支持。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

Go语言的主要的功能在于简单易用的并行设计Goroutine,支持异步运行而不需要担心一个函数导致程序中断,因此Go语言也非常地适合网络服务。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

Goroutine是类似线程的概念(但Goroutine并不是线程)。线程属于系统层面,通常来说创建一个新的线程会消耗较多的资源且管理不易。而 Goroutine就像轻量级的线程,可以称其为并发,一个Go程序可以运行超过数万个 Goroutine,并且这些性能都是原生级的,随时都能够关闭、结束。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

Julia

Julia是一种用于数学计算的高级编程语言,为分布式计算和并行而设计。Julia最大的卖点就是处理速度,作为一门动态语言,它几乎具备跟静态语言,如C语言一般的效率。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

按开发者的话说,“我们希望这门开源语言像C一样快,像Python一样通用,像R做统计那么简单,像Perl做文本处理那么方便,像Matlab的线性代数一样强大,还和Shell一样可以把各种程序连接起来”。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

然而使用者实在过少,支持库也少得可怜。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

Spark 多语言编程

Spark 目前支持Scala、Python、Java三种编程语言。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

Scala 作为Spark的原生语言,代码优雅、简洁而且功能完善,很多开发者都比较认可,它是业界广泛使用的Spark程序开发语言。
Spark 也提供了Python的编程模型PySpark,使得Python可以作为Spark开发语言之一。 尽管现在PySpark还不能支持所有的Spark API,但是以后的支持度会越来越高。
Java 也可以作为Spark的开发语言之一,但是相对于前两者而已,逊色了很多。但是Java8却很好地适应了Spark的开发风格。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

Python API和Scala API:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

Python是动态语言,RDD 可以持有不同类型的对象。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

PySpark 目前并没有支持全部的API,但核心部分已经全部支持。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

在PySpark里,RDD支持和Scala一样的方法,只不过这些方法是Python函数来实现的,返回的也是Python的集合类型;对于RDD方法中使用的短函数,则可以使用Python的Lambda语法实现。
使用Python开发Spark应用程序也有很多优势,比如说不需要编译,使用方便,还可以与许多系统集成,特别是NoSQL大部分都提供了Python开发包。
---------------------
作者:羊肉串串魅力无穷
来源:CSDN文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/6936.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/6936.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定