11.1 Spark Sql;jsonRDD转换成DataFrame

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011418530/article/details/81332189

Hive是Shark的前身,Shark是SparkSQL的前身

Shark是基于Spark计算框架之上且兼容Hive语法的SQL执行引擎,由 于底层的计算采用了Spark,性能比MapReduce的Hive普遍快2倍以上, 当数据全部load在内存的话,将快10倍以上,因此Shark可以作为交互式 查询应用服务来使用。

除了基于Spark的特性外,Shark是完全兼容Hive的语法,表结构以 及UDF函数等,已有的HiveSql可以直接进行迁移至Shark上

Shark底层依赖于Hive的解析器,查询优化器,但正是由于SHark的整 体设计架构对Hive的依赖性太强,难以支持其长远发展,比如不能和 Spark的其他组件进行很好的集成,无法满足Spark的一栈式解决大数据处 理的需求

相对于Shark,SparkSQL有什么优势呢?

SparkSQL产生的根本原因,其完全脱离了Hive的限制

SparkSQL支持查询原生的RDD,这点就极为关键了。RDD是Spark平台的核心概念,是 Spark能够高效的处理大数据的各种场景的基础

能够在Scala中写SQL语句。支持简单的SQL语法检查,能够在Scala中写Hive语句访问Hive数 据,并将结果取回作为RDD使用

最进出来另个组合名称:

Spark on Hive

Hive只是作为了存储的角色

SparkSQL作为计算的角色

Hive on Spark

Hive承担了一部分计算(解析SQL,优化SQL...)的和存储

Spark作为了执行引擎的角色


DataFrame创建的方式:

SparkConf conf = new SparkConf().setAppName("DataFrameTest").setMaster("local");

JavaSparkContext jsc =new JavaSparkContext(conf);

SQLContext sc = new SQLContext(jsc);//new一个SQLContext对象

DataFrame df = sc.read().json("test.json");//按json格式读取文件

/**

* 默认只是显示这个DF里面的前十行数据

* 类似Spark core里面的action类算子

*/

df.show();

df.printSchema();//查看表结构类型

df.select("age").show();//相当于 select age from table

//相当于:SELECT name,age+10 as plusAge FROM table;

df.select(df.col("name"),df.col("age").plus(10).as("plusAge")).show();

df.filter(df.col("age").gt(10)).show();//相当于:SELECT * FROM table WHERE age > 10

df.groupBy(df.col("age")).count().show(); //相当于:SELECT COUNT(*) FROM p GROUP BY age

/**

* 将DataFrame注册成一张临时表

* table1这个表,会物化到磁盘吗? 这个表只是逻辑上的。

*/

df.registerTempTable("table1");

sc.sql("SELECT * FROM table1 WHERE age>10").show();


猜你喜欢

转载自blog.csdn.net/u011418530/article/details/81332189
今日推荐