当前位置:   article > 正文

spark1.x和spark2.x的区别_spark版本

spark版本

spark 2.x 版本相对于1.x版本,有挺多地方的修改,

1 Spark2 Apache Spark作为编译器:增加新的引擎Tungsten执行引擎,比Spark1快10倍

2 ml做了很大的改进,支持协同过滤

http://spark.apache.org/docs/latest/ml-collaborative-filtering.html

3 spark2 org.apache.spark.sql加了SparkSession把Spark的SQLcontext和hiveContext整合dataFrame去掉了,统一采用dataset

4 做流的方式,例如设置10秒钟一批,5秒钟处理

5 R语言API加入了很多机器学习的算法

同时Spark2.x引入了很多优秀特性,性能上有很大提升,API更易用。实现了离线计算和流计算的统一,实现了Spark sql和Hive Sql操作API的统一。
Spark 2.x基本上是基于Spark 1.x进行了更多的功能和模块的扩展,及性能的提升
Spark 2.x新特性
1)Spark Core/SQL
在内存和CPU使用方面进一步优化Spark引擎性能,支持SQL 2003标准,支持子查询,对常用的SQL操作和DataFrame,性能有2-10倍的提升
2)sparksession
Spark2.0 中引入了 SparkSession 的概念,它为用户提供了一个统一的切入点来使用 Spark 的各项功能,统一了旧的SQLContext与HiveContext。用户不但可以使用 DataFrame 和Dataset 的各种 API,学习 Spark2 的难度也会大大降低。
3)统一 DataFrames 和 Datasets 的 API
它们都是提供给用户使用,包括各类操作接口的 API,1.3 版本引入 DataFrame,1.6版本引入Dataset,在 spark 2.0 中,把 dataframes 当作是一种特殊的 datasets,dataframes = datasets[row],把两者统一为datasets。
4) strutured Streaming
Spark Streaming基于Spark SQL(DataFrame / Dataset )构建了high-level API,使得Spark Streaming充分受益Spark SQL的易用性和性能提升。
5) 其它特性
mllib里的计算用 DataFrame-based aPI替代以前的RD计算裸机,提供更多的R语言算法,默认使用Scala 2.11编译与运行

这里就其中的两点进行详细说明

一是类似于flatMapRDD 中 iteator iteatable之类的区别

二是类似于dataset的一些问题

下面是2.x版本的iteatable和iteartor之类的区别,只举例了两个,其实只要和iteartor有关的都有了修改

flatMap
        JavaRDD<String> flatMapRDD = lines.flatMap(new FlatMapFunction<String, String>() {
            @Override
            public Iterator<String> call(String s) throws Exception {
                String[] split = s.split("\\s+");
                return Arrays.asList(split).iterator();
            }
        });

flatMapToPair  java
        JavaPairRDD<String, Integer> wordPairRDD = lines.flatMapToPair(new PairFlatMapFunction<String, String, Integer>() {
            @Override
            public Iterator<Tuple2<String, Integer>> call(String s) throws Exception {
                ArrayList<Tuple2<String, Integer>> tpLists = new ArrayList<Tuple2<String, Integer>>();
                String[] split = s.split("\\s+");
                for (int i = 0; i <split.length ; i++) {
                    Tuple2 tp = new Tuple2<String,Integer>(split[i], 1);
                    tpLists.add(tp);
                }
                return tpLists.iterator();
            }
        });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

spark中初始化driver的区别
spark2.0中,可以使用session来创建一个sparkContext作为一个新的入口,具体参考例子就可以了
jar包的区别
spark2.x版本中不再有spark-assembly-xxx jar包,jar包全都在.jars 中
scala的版本
spark2.x版本的,对scala的版本最低要求是2.11
下面是sql中的区别
2.x 版本的 sparkSql中
1.x 版本的 DataFrame与Dataset 统一化了,只剩下DataSet了,具体的也可以直接参看官方给的spark sql 的例子即可
具体 todo
iterator and iterable 共用

import java.util.Iterator;

public class MyIterator<T> implements Iterator, Iterable 
{
	private Iterator myIterable;

	public MyIterator(Iterable iterable)
	{
		myIterable = iterable.iterator();
	}

	@Override
	public boolean hasNext() 
	{
		return myIterable.hasNext();
	}

	@Override
	public Object next() 
	{
		return myIterable.next();
	}

	@Override
	public void remove() 
	{
		myIterable.remove();
	}

	@Override
	public Iterator iterator() 
	{
		return myIterable;
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

使用方法
JavaRDD flatMapRDD = lines.flatMap(new FlatMapFunction<String, String>() {
@Override
public MyIterator call(String s) throws Exception {
String[] split = s.split(“\s+”);
MyIterator myIterator = new MyIterator(Arrays.asList(split));
return myIterator;
}
});

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/691787
推荐阅读
相关标签
  

闽ICP备14008679号