DataFrame

目录

一、创建DataFrame

在SparkSql中SparkSession是创建DataFrame和执行Sql的入口,创建DataFrame有三种方式:

  1. 通过Spark的数据源进行创建

  2. 从一个存在的RDD进行转换

  3. 从Hive Table进行查询返回

二、Sql语法

Sql语法风格是指我们查询数据的时候使用Sql语句来查询,这种风格的查询必须要有临时视图或者全局视图来辅助

注意:

普通临时表是Session范围内的,如果想应用范围内有效,可以使用全局临时表,使用全局临时表时需要全路径访问,如:global_temp.people

对于DataFrame创建一个全局表:

复制代码
df.createGlobalTempView("people")

通过Sql语句实现查询全表

三、DSL语法

DataFrame提供了一个特定领域语言(domain-specific language,DSL)去管理结构化的数据,可以在Scala,Java,Python和R中使用DSL,使用DSL语法风格不必去创建临时视图了

注意:

当涉及到运算的时候,每列都必须使用$,或者采用引号表达式:单引号+字段名

起别名:

查看age大于等于30的数据:

根据 age 分组,查看数据条数

四、RDD与DataFrame互相转换

在IDEA中开发程序时,如果需要RDD与DF或者DS之间互相操作,那么需要引入:

复制代码
import spark.implicits._

这里的spark不是scala中的包名,而是创建的sparkSession对象的变量名称,所以必须先创建SparkSession对象再导入,这里的spark对象不能使用var声明,因为scala只支持val修饰的对象的引入,spark-shell中无需导入,自动完成此操作

用var修饰的话,编译不通过

rdd与dataframe互相转换:

scala 复制代码
 val spark: SparkSession = SparkSession
      .builder()
      .master("local[*]")
      .getOrCreate()

    import spark.implicits._

    val rdd: RDD[Int] = spark.sparkContext.makeRDD(List(1,2,3,4,5))

    val df: DataFrame = rdd.toDF("id")

    val rdd2: RDD[Row] = df.rdd

    df.show()

    println("-" * 100)

    rdd2.collect().foreach(println)
相关推荐
得物技术4 小时前
深入剖析Spark UI界面:参数与界面详解|得物技术
大数据·后端·spark
肌肉娃子4 天前
20260227.spark.Spark 性能刺客:千万别在 for 循环里写 withColumn
spark
B站计算机毕业设计超人5 天前
计算机毕业设计Django+Vue.js音乐推荐系统 音乐可视化 大数据毕业设计 (源码+文档+PPT+讲解)
大数据·vue.js·hadoop·python·spark·django·课程设计
十月南城5 天前
数据湖技术对比——Iceberg、Hudi、Delta的表格格式与维护策略
大数据·数据库·数据仓库·hive·hadoop·spark
Asher05095 天前
Spark核心基础与架构全解析
大数据·架构·spark
FYKJ_20109 天前
springboot大学校园论坛管理系统--附源码42669
java·javascript·spring boot·python·spark·django·php
鸿乃江边鸟11 天前
Spark Datafusion Comet 向量化Rust Native--Native算子ScanExec以及涉及到的Selection Vectors
大数据·rust·spark·arrow
派可数据BI可视化12 天前
一文读懂系列:数据仓库为什么分层,分几层?数仓建模方法有哪些
大数据·数据仓库·信息可视化·spark·商业智能bi
码字的字节12 天前
锚点模型:数据仓库中的高度可扩展建模技术详解
大数据·数据仓库·spark