R,Python,Scala 和 Java,到底该使用哪一种大数据编程语言

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R,Python,Scala 和 Java,到底该使用哪一种大数据编程语言相关的知识,希望对你有一定的参考价值。

哪一种都行,Python适用于脚本,网络和爬虫,Java适用网络,商业和游戏,r适用于脚本和网络 参考技术A Scala用来编写Spark比较好。 参考技术B 介绍一下这几种语言的区别:
R是统计领域广泛使用的诞生于1980年左右的S语言的一个分支。可以认为R是S语言的一种实现。而S语言是由AT&T贝尔实验室开发的一种用来进行数据探索、统计分析和作图的解释型语言。
优点
1.优秀的高质量、特定领域的,并且开源的软件开发包。R语言有一个包括神经网络、非线性回归模型、系统、绘图和几乎所有数量和统计应用功能的开发包。
2. R语言的基础安装版就具有非常全面的、内置的统计功能和方法,同时R语言特别擅长处理矩阵代数。
3.R语言拥有优秀的数据可视化功能。
缺点
1.R语言不是一种快速语言,并且没有很好的通用性,虽然对于统计和数据科学而言R语言是一个很好的选择,但是对于通用编程而言,这样的语言并不友好。
2.R语言的一些不寻常的特点和大多数的语言相比显得有些古怪,譬如:从1开始索引,使用多个赋值操作符,非常规的数据结构。
总结
R是一种功能强大的语言,它擅长统计和数据可视化应用程序的大量应用,而开源则允许非常活跃的贡献者社区。最近人气的增长证明了它的有效性。
Python
1991年将Python带给我们,它后来成为一种非常流行的通用语言,在数据科学界得到了广泛的应用。目前主要版本为3.6和2.7。Guido van 1991年将Python带给我们,它后来成为一种非常流行的通用语言,在数据科学界得到了广泛的应用。目前主要版本为3.6和2.7。
优点
1. Python是一种非常流行的主流通用编程语言。它有广泛的目标模块和社区支持。许多在线服务提供了一个Python API。
2.Python是一门容易学的语言。低进入门槛使它成为新编程者理想的第一语言。
3.pandas, scikit-learn and Tensorflow的第三包的存在使的Python为先进的机器学习应用提供了很好的应用支持。
缺点
1. Python是一种动态类型语言,这意味着类型错误经常是不可预料的。
2.对于特定的统计和数据分析目的,R的大量包使它比Python更具优势。对于通用语言,更快更安全的Python稍有优势。
总结(加图片下方数字入学习交流裙)
Python是数据科学的一个很好的选择,而不仅仅是入门级的。大部分的数据科学过程围绕着ETL过程(提取转换加载)。另外Python的通用性非常好,譬如:Google的tensorflow使Python在机器学习领域成为了一个非常激动人心的语言。
Java
java是一个非常受欢迎的通用语言,可以在平台之间实现无缝移植。目前由甲骨文公司支持。
优点
1. 无处不在。许多现代的系统和应用程序是建立在java后台之上。
2.强类型。java确保类型安全,这对于关键任务的大数据应用程序来说是非常宝贵的。
3.java是一种高性能,通用的语言 。这使得它适合于编写高效的ETL生产代码和计算密集型的机器学习算法。
缺点
1. 对于特殊的分析和更专门的统计方案而言,java的冗长使得它不太可能首选。动态类型的脚本语言(如R和Python)可以获得更高的生产率。
2.Java相比于专精于数据领域的语言而言,没有大量的统计方法库。
总结
学习java作为第一选择的数据科学语言。许多公司都会希望=数据科学的生产代码能够直接集成到他们现有的代码库上,另外,你会发现java的性能和类型安全是真正的优势。但是,如果把需求特定于统计和数据科学范围。那么,拥有全面统计和数据科学包的Python和R绝对是不能忽视的选择。
Scala
Scala由Martin Odersky在2004发布,是一种能够运行在JVM上的语言。它是一种多范型语言,支持面向对象和函数式编程。
优点
1. 高性能集群计算。对于那些使用高容量数据集的人来说,Scala是一种理想的语言选择。
2.Scala能够编译成java字节码运行在JVM上。这使的Scala成为了一种强大的通用语言,同时也非常适合数据科学。
缺点
1. 如果你刚开始的话,Scala并不是一种可以直接启动和运行的语言。
2.语法和类型系统通常被描述的过为复杂,对于学习Python这样的动态语言的人来说不是一种容易学习的语言。
总结
当使用集群计算来处理大数据时,Scala + Spark是极好的解决方案。如果你有java和其他静态类型语言的经验,你会喜欢上Scala的功能。然而,如果您的应用程序没有那么多的数据需要处理时,您可能会发现使用其他语言(如R或Python)会是一个更好的选择。
以上就是这些语言的分析,我经常使用的是R,Python和SQL,这是因为我的工作集中在开发数据管道和ETL,并不是这是绝对的选择。本回答被提问者采纳

spark2.x由浅入深深到底系列六之RDD java api调用scala api的原理

RDD java api其实底层是调用了scala的api来实现的,所以我们有必要对java api是怎么样去调用scala api,我们先自己简单的实现一个scala版本和java版本的RDD和SparkContext


一、简单实现scala版本的RDD和SparkContext

class RDD[T](value: Seq[T]) {
  //RDD的map操作
  def map[U](f: T => U): RDD[U] = {
    new RDD(value.map(f))
  }
  
  def iterator[T] = value.iterator
  
}

class SparkContext {
  //创建一个RDD
  def createRDD(): RDD[Integer] = new RDD[Integer](Seq(1, 2, 3))

}


二、简单实现java版本的RDD和SparkContext

//这个时java中的一个接口
//我们可以将scala中的map需要的函数其实就是对应着java中的一个接口
package com.twq.javaapi.java7.function;
public interface Function<T1, R> extends Serializable {
  R call(T1 v1) throws Exception;
}

//这边实现的java版的RDD和SparkContext其实还是用scala代码实现,只不过这些scala代码可以被java代码调用了
import java.util.{Iterator => JIterator}
import scala.collection.JavaConverters._
import com.twq.javaapi.java7.function.{Function => JFunction}
//每一个JavaRDD都会含有一个scala的RDD,用于调用该RDD的api
class JavaRDD[T](val rdd: RDD[T]) {

  def map[R](f: JFunction[T, R]): JavaRDD[R] =
    //这里是关键,调用scala RDD中的map方法
    //我们将java的接口构造成scala RDD的map需要的函数函数
    new JavaRDD(rdd.map(x => f.call(x)))
  //我们需要将scala的Iterator转成java版的Iterator
  def iterator: JIterator[T] = rdd.iterator.asJava

}

//每个JavaSparkContext含有一个scala版本的SparkContext
class JavaSparkContext(sc: SparkContext) {
  def this() = this(new SparkContext())
  //转调scala版本的SparkContext来实现JavaSparkContext的功能
  def createRDD(): JavaRDD[Integer] = new JavaRDD[Integer](sc.createRDD())
}

三、写java代码调用rdd java api

package com.twq.javaapi.java7;

import com.twq.javaapi.java7.function.Function;
import com.twq.rdd.api.JavaRDD;
import com.twq.rdd.api.JavaSparkContext;

import java.util.Iterator;

/**
 * Created by tangweiqun on 2017/9/16.
 */
public class SelfImplJavaRDDTest {
    public static void main(String[] args) {
        //初始化JavaSparkContext
        JavaSparkContext jsc = new JavaSparkContext();
        //调用JavaSparkContext的api创建一个RDD
        JavaRDD<Integer> firstRDD = jsc.createRDD();
        //对创建好的firstRDD应用JavaRDD中的map操作
        JavaRDD<String> strRDD = firstRDD.map(new Function<Integer, String>() {
            @Override
            public String call(Integer v1) throws Exception {
                return v1 + "test";
            }
        });
        //将得到的RDD的结果打印,结果为
        //1test
        //2test
        //3test
        Iterator<String> result = strRDD.iterator();
        while (result.hasNext()) {
            System.out.println(result.next());
        }
    }
}


以上就是RDD java api调用scala api的实现原理,虽然只举了map操作,但是其他的类似于flatMap操作的实现都是类似的


接下来可以详细了解RDD java的每一个api


我们可以spark core RDD api来详细理解scala中的每一个api。。。

以上是关于R,Python,Scala 和 Java,到底该使用哪一种大数据编程语言的主要内容,如果未能解决你的问题,请参考以下文章

到底该学Java还是Python

spark2.x由浅入深深到底系列六之RDD java api调用scala api的原理

scala 如何查看数据类型

Apache Spark (scala) + python/R 数据分析工作流程

idea scala pycharm 如何 动态调试

如何快速学习Scala