当前位置:   article > 正文

sparkSQL----sql简介 创建DataFrame sparksql读取各种文件 Dataset的Encoder_org.apache.spark.sql.types

org.apache.spark.sql.types

sparksql简介

Spark SQL是Spark用来处理结构化数据

RDD + Schema = 可以先生成逻辑计划(DAG), 在优化后生成物理计划(Task)

Dataset: 更加智能的RDD, 有Encoder并且在Encoder有Schema和序列化和反序列化方法, 还带有执行计划

               有执行计划, 先根据你对Dataset的操作生成逻辑计划, 然后在生成优化过的逻辑计划, 最后生成进一步优化的物理计划

               强数据类型, 将数据放在堆外内存, 效率更高, 更加节省空间, 内存管理起来更加灵活高效

DataFrame: 是Dataset[Row]的一种特殊格式

                     DataFrame相当于RDD+Schema, 有了更多的描述信息

                     有rowEncoder, 并且还有schema

                     强数据类型, 将数据放在堆外内存, 效率更高, 更加节省空间, 内存管理起来更加灵活高效

网站(spark.apache.org/sql)

1. 什么是DataFrames?  

与RDD类似, DataFrame也是一个分布式数据容器[抽象的], 然而DataFrame更像传统数据库的二维表格, 除了RDD的描述数据以外, 还记录数据的结构信息, 即 schema,

与hive相似, DataFrame也支持嵌套数据类型(struct, array和map)

DataFrame = RDD + Schema【更加详细的结构化描述信息】,以后在执行就可以生成执行计划,进行优化,是Dataset的一种特殊格式

2. sparksql特性

1) 易整合

            Spark SQL使得在spark编程中可以混搭SQL和算子API编程

2) 统一的数据格式

           Spark SQL为各类不同数据源提供统一的访问方式,可以跨各类数据源进行愉快的join;所支持的数据源包括但不限于: Hive / Avro / CSV / Parquet / ORC / JSON / JDBC等;

3) 兼容Hive

           Spark SQL支持HiveQL语法及Hive的SerDes、UDFs,并允许你访问已经存在的Hive数仓数据;

4) 标准的数据连接

           Spark SQL的server模式可为各类BI工具提供行业标准的JDBC/ODBC连接,从而可以为支持标准JDBC/ODBC连接的各类工具提供无缝对接;(开发封装平台很有用哦!)

 SparkSQL可以看做一个转换层,向下对接各种不同的结构化数据源,向上提供不同的数据访问方式

 

创建DataFrame (常用第一种和第三种, 第三种是最正宗的写法)

第一种创建方法: 将RDD关联case class创建DataFrame

  1. package cn.doit.spark.sql01
  2. import org.apache.spark.rdd.RDD
  3. import org.apache.spark.sql.{DataFrame, Dataset, Row, SparkSession}
  4. /*
  5. 将RDD关联Case class创建DataFrame
  6. +------+-------+------+
  7. | name|subject|scores|
  8. +------+-------+------+
  9. |孙悟空| 数学| 95|
  10. | 娜娜| 语文| 94|
  11. |孙悟空| 语文| 87|
  12. | 宋宋| 数学| 86|
  13. | 婷婷| 数学| 85|
  14. | 娜娜| 英语| 84|
  15. | 宋宋| 英语| 84|
  16. | 婷婷| 英语| 78|
  17. |孙悟空| 英语| 68|
  18. | 婷婷| 语文| 65|
  19. | 宋宋| 语文| 64|
  20. | 娜娜| 数学| 56|
  21. +------+-------+------+
  22. */
  23. object DataFrameCreateDemo01 {
  24. def main(args: Array[String]): Unit = {
  25. //创建SparkConf, 然后创建SparkContext
  26. //使用SparkContext创建RDD
  27. //调用RDD的算子(Transformation和Action')
  28. //释放资源 sc.stop
  29. //创建SparkSession builder(构建) getOrCreate(创建)
  30. val spark: SparkSession = SparkSession.builder()
  31. .appName("DataFrameCreateDemo01")
  32. .master("local[*]")
  33. .getOrCreate()
  34. val sc = spark.sparkContext
  35. val rdd1: RDD[String] = sc.textFile("hdfs://linux01:8020/tb_stu")
  36. val rdd2: RDD[User] = rdd1.map(e => {
  37. val fields = e.split("\t")
  38. User(fields(0), fields(1), fields(2).toInt)
  39. })
  40. //导入隐式转换
  41. import spark.implicits._
  42. //将RDD转成特殊的数据集
  43. val df: DataFrame = rdd2.toDF()
  44. //使用两种风格的API
  45. //使用SQL风格
  46. //创建一个临时的视图
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/603660
推荐阅读
相关标签
  

闽ICP备14008679号