转载请标明出处http://www.cnblogs.com/haozhengfei/p/22bba3b1ef90cbfaf073eb44349c0757.html 


Spark_总结四

1.Spark SQL  

Spark_总结四

    Spark SQL 和 Hive on Spark 两者的区别?
        spark on hive:hive只是作为元数据存储的角色,解析,优化,执行都是spark做的    
        hive on spark: hive既作为存储的角色,又作为计算角色的一部分,hive将sql解析Spark任务,底层是Spark引擎hive2.0以后推荐使用Spark引擎,转化为Spark任务,hvie2.0以前都是转化为MR任务)
            
    Spark SQL 转化的过程(底层架构)
Spark_总结四
 
【SQL/HQL-->解析器-->分析器-->优化器-->CostModel消耗模型(选出消耗最低的,就是效率最高的),最终将传入的SQL转换为RDD的计算】
 
须知:
        若想使用SparkSQL必须创建SQLContext 必须是传入SparkContext 不能是SparkConf
Spark_总结四
 
1.DataFrame与RDD的区别?   ||   什么是DataFrame?

Spark_总结四

区别:
      Spark core是基于RDD的编程,Spark SQL是基于DataFrame的编程,DataFrame的底层就是封装的RDD,只不过DataFrame底层RDD的泛型是ROW(DataFrame <==> RDD<ROW>),另外,DataFrame中有对列的描述,但是RDD没有对列的描述。      
What is DataFrame:
      DataFrame RDD 类似,DataFrame 是一个分布式数据容器,更像传统数据库的二维表格,除了数据以外,还掌握数据的结构信息(比如对列的描述), 即 schema。同时,与 Hive 类似,DataFrame 也支持嵌套数据类型(struct、 array 和 map)。 从 API 易用性的角度上 看,DataFrameAPI 提供的是一套高层的关系操作函数式的 RDDAPI 更加友好,门槛更低。 

3.创建DataFrame的来源和方   ||   如何对DataFrame中封装的数据进行操作?

3.1创建DataFrame的来源和方
Spark_总结四
 

3.2如何对DataFrame中封装的数据进行操作?

   当我们的DataFrame构建好之后,里面封装了我们的数据,需要对数据进行操作即对DataFrame进行操作,有两种方式
3.2.1   通过方法
        sqlContext.read()    返回DataFrameReader对象
        sqlContext.read().json("student.json")   读取一个json文件(这个json文件中的内容不能是嵌套的)读进来变成DataFrame,
        df.select("age").show(),如果没有show,这个程序就不会执行,这个show就类似与Spark中Action类型的算子,触发执行
 
示例代码:
 1 package com.hzf.spark.exercise;
 2 
 3 import org.apache.spark.SparkConf;
 4 import org.apache.spark.api.java.JavaSparkContext;
 5 import org.apache.spark.sql.DataFrame;
 6 import org.apache.spark.sql.SQLContext;
 7 
 8 public class TestSparkSQL {
 9     public static void main(String[] args) {
10         SparkConf conf = new SparkConf().setAppName("DataFrameOps").setMaster("local");
11         
12         JavaSparkContext sc = new JavaSparkContext(conf);
13         SQLContext sqlContext = new SQLContext(sc);
14         
15         DataFrame df = sqlContext.read().json("people.json");
16         
17         
18         /*
19          * 操作DataFrame的第一种方式
20          * */
21         //类似 SQL的select from table;
22         df.show();
23         //desc table
24         df.printSchema();
25         
26         //select age from table;
27         df.select("age").show();
28         //select name from table;
29         df.select("name").show();
30         //select name,age+10 from table;
31         df.select(df.col("name"),df.col("age").plus(10)).show();
32         //select * from table where age > 20
33         df.filter(df.col("age").gt(20)).show();
34     }
35 }
View Code

相关文章:

  • 2021-06-27
  • 2021-12-10
  • 2021-11-21
  • 2021-12-11
  • 2021-08-26
  • 2021-11-22
  • 2021-09-21
  • 2021-07-03
猜你喜欢
  • 2022-12-23
  • 2021-11-07
  • 2021-10-16
  • 2022-12-23
  • 2021-11-20
  • 2021-08-21
相关资源
相似解决方案