R,Python,Scala,Go,Julia

R

R语言主要用于统计分析、绘图、数据挖掘,可在多种平台下运行,包括UNIX、Windows和MacOS。R主要是以命令行操作,也有图形用户界面支持。

优点:

  1. 具有包括神经网络、非线性回归模型、系统、绘图和几乎所有数量和统计应用功能的开源开发包。
  2. 具有全面的、内置的统计功能和方法,擅长处理矩阵代数。
  3. 优秀的数据可视化功能。

缺点:

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

Python

  • Python在学术界一直很流行,尤其是在自然语言处理(NLP)领域。
  • Python有面向神经网络的Theano和Tensorflow,有面向机器学习的scikit-learn,以及面向数据分析的NumPy和Pandas。
  • 有Juypter/iPython这种基于Web的笔记本服务器框架让你可以使用一种可共享的日志格式,将代码、图形以及几乎任何对象混合起来。
  • Python往往在大数据处理框架中得到支持,但与此同时,它往往又不是“一等公民”。比如说,Spark中的新功能几乎总是出现在Scala绑定的首位,可能需要用PySpark编写面向那些更新版的几个次要版本(对Spark Streaming/MLLib方面的开发工具而言尤为如此)。
  • Python是一种动态类型语言,这意味着类型错误经常是不可预料的。
  • 对于特定的统计和数据分析目的,R的大量包使它比Python更具优势。对于通用语言,更快更安全的Python稍有优势。

Scala

Scala是一种能够运行在JVM上的语言。它是一种多范型语言,支持面向对象和函数式编程。

优点:

  • 当使用集群计算来处理大数据时,Scala + Spark是极好的解决方案。
  • Scala能够编译成java字节码运行在JVM上。这使的Scala成为了一种强大的通用语言,同时也非常适合数据科学。

缺点:

  • 语法和类型系统通常过为复杂。
  • 如果没有那么多的数据需要处理时,使用其他语言(如R或Python)可能会是一个更好的选择。

Go

Go(Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。

与C++相比,Go语言并不包括如异常处理、继承、泛型、断言、虚函数等功能,但增加了 Slice 型、并发、管道、垃圾回收、接口(Interface)等特性的语言级支持。

Go语言的主要的功能在于简单易用的并行设计Goroutine,支持异步运行而不需要担心一个函数导致程序中断,因此Go语言也非常地适合网络服务。

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

Julia

Julia是一种用于数学计算的高级编程语言,为分布式计算和并行而设计。Julia最大的卖点就是处理速度,作为一门动态语言,它几乎具备跟静态语言,如C语言一般的效率。

按开发者的话说,“我们希望这门开源语言像C一样快,像Python一样通用,像R做统计那么简单,像Perl做文本处理那么方便,像Matlab的线性代数一样强大,还和Shell一样可以把各种程序连接起来”。

然而使用者实在过少,支持库也少得可怜。

Spark 多语言编程

Spark 目前支持Scala、Python、Java三种编程语言。

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

Python API和Scala API:

  • Python是动态语言,RDD 可以持有不同类型的对象。
  • PySpark 目前并没有支持全部的API,但核心部分已经全部支持。
  • 在PySpark里,RDD支持和Scala一样的方法,只不过这些方法是Python函数来实现的,返回的也是Python的集合类型;对于RDD方法中使用的短函数,则可以使用Python的Lambda语法实现。
  • 使用Python开发Spark应用程序也有很多优势,比如说不需要编译,使用方便,还可以与许多系统集成,特别是NoSQL大部分都提供了Python开发包。

猜你喜欢

转载自blog.csdn.net/lk3030/article/details/79688783