SparkSQl-DataFrame创建

知识点

1.DataFrame 与 RDD 的主要区别在于,前者带有 schema 元信息,即 DataFrame 所表示的二维表数据集的每一列都带有名称和类型,从而对藏于 DataFrame 背后的数据源以及作用于 DataFrame 之上的变换进行了针对性的优化,最终达到大幅提升运行时效率的目标。反观 RDD,由于无从得知所存数据元素的具体内部结构,Spark Core 只能在 stage 层面进行简单、通用的流水线优化

2.从Spark数据源进行创建

(1)读取CSV文件创建DataFrame

## 读取staff.csv文件创建DataFrame对象  
val df: DataFrame = spark.read.format("csv")  ##指定加载的数据类型
.option("sep", ";") ##指定分割符
.option("header","true") ##获取头部信息
.load("/root/staff.csv")  ##加载数据的路径
## 调用show方法查看数据  
df.show() 

(2)读取JSON文件创建DataFrame

## 读取user.json文件创建DataFrame对象
val df: DataFrame = spark.read.json("/root/user.json")
## 调用show方法查看数据
df.show()

3.从RDD进行转换

调用RDD中的toDF方法转换为DataFrame对象,由于RDD与DataFrame转换需要引入隐式转换规则,否则无法进行转换。

## spark不是包名,是上下文环境对象名
import spark.implicits._
## 创建RDD对象
val rdd: RDD[(Int, String, Int)] = spark.sparkContext.makeRDD(List((1, "ww", 20), (2, "ss", 30), (3, "xx", 40)))
## 通过toDF方法将RDD转为DataFrame
val df: DataFrame = rdd.toDF("id", "name", "age")
## 调用show方法查看数据
df.show()

4.SQl语法

(1)创建临时视图

## 读取JSON文件创建DataFrame对象
val df: DataFrame = spark.read.json("/root/user.json")
## 对DataFrame对象创建一个临时视图
df.createOrReplaceTempView("user")
## 通过SQL语句实现表查询
spark.sql("select * from user").show()
spark.sql("select avg(age) from user").show()

(2)创建全局视图

## 读取JSON文件创建DataFrame对象
val df: DataFrame = spark.read.json("/root/user.json")
## 对DataFrame对象创建一个全局表
df.createGlobalTempView("people")
## 通过SQL语句实现表查询
spark.sql("select username from global_temp.people").show()
## 创建新的Session会话,在该Session中进行查询
spark.newSession().sql("SELECT * FROM global_temp.people").show()

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

## 读取JSON文件创建DataFrame对象
val df: DataFrame = spark.read.json("/root/user.json")
## 通过DSL语句实现表查询
df.select("age","username").show()
df.select($"age"+1).show()
df.select('age+1).show()

编程要求

  • 读取csv文件创建DataFrame:/root/student.csv

  • 创建临时视图student,通过SQL语法查询name列数据

  • 通过DSL语法查看name列数据以及id+1数据

  • 调用toDF()方法转换rdd并查看数据

  • 数据切分方式:逗号(,

    数据所在目录:/root/student.csv

student表结构:

INFOTYPE
idint
namestring
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, sql}
import org.apache.spark.sql.{DataFrame, Dataset, Row, SparkSession}

object sparkSQL_dateFrame {

  def main(args: Array[String]): Unit = {
    //创建上下文环境配置对象
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("sparkSQL")  
    //创建SparkSession对象
    val spark =SparkSession.builder().config(sparkConf).getOrCreate()
    import spark.implicits._
    //创建RDD对象
    val rdd = spark.sparkContext.makeRDD(List(("Anne","male"),("小敏","male"),("冰墩墩","female")))
  	/********* Begin *********/
    //指定加载的数据类型、分割符,获取头部信息,加载数据路径
    val df:DataFrame=spark.read.format("csv").option("sep",",").option("header","true").load("/root/student.csv")
    //df.show()
    df.createOrReplaceTempView("student")  //创建临时视图
    spark.sql("select name from student").show()
    df.select(df("name"), df("id") + 1).show()
    // 调用toDF()方法转换rdd并查看数据
    val dfFromRdd = rdd.toDF("name","sex")
    dfFromRdd.show()
    
		/********* End *********/


    // TODO 关闭环境
    spark.close()

  }

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值