spark期末复习(三)spark SQL

简介

  • spark core:弹性分布式数据库
  • spark SQL:带有schema信息的RDD
  • spark sql支持非结构化数据分析、半结构化数据分析、结构化数据分析
  • spark sql将关系数据库的结构化数据管理能力机器学习算法的数据处理能力融合

Dataframe

spark的数据抽象是RDD
spark SQL的数据抽象是DataFrame
与RDD相比,DataFrame会关注数据的结构

DataFrame的创建

构建RDD需要声明SparkContext对象,构建DataFrame则需要构建SparkSession对象
创建步骤:

  1. 导入包,创建环境对象SparkSession
     	import org.Apache.spark.sql.SparkSession 
     	val spark = SparkSession.builder().getOrCreate()
    
  2. 导入隐式转换的包:
    import spark.implicits._
    
  3. 读取文件:
    1. 用spark.read()方法,调用.json(路径).csv(路径)\parquet(路径)
    2. (泡泡糖上没写)用load.format.json()/csv()/-加载
      实例

DataFrame的保存

使用spark.write来保存:

df.write.json(“xx”)
df.write.parquet(“xxx”)
df.write.csv(“xxx”)

DataFrame的操作

选择

df.select(df(“属性名1”),df(“属性名2”).show()

筛选

df.filter(df(“”) > x).show()

分组聚合

df.groupBy(“xx”).count().show()

排序:

df.sort(df(“xx”).desc,df(“xxx”).esc).show()

desc为降序排列

重命名

Do.select(df.(“x1”).as(“x2)).show()

RDD转换为DataFrame

利用反射机制推断RDD模式

讲RDD转换成一个DataFrame:

  1. 创建一个类型
    case class Person(name:String,age:Int)

  2. 读取一个RDD,划分,并封装为Person类型,通过**toDF()**函数,将RDD转换为DataFrame

    val perpleDF = spark.sparkContext.textFile(“”)
        .map(_.split(” ”)
        .map(data => Person(data(0)),data(1).trim.toInt))
        .toDF()
    

进行查询:先通过createOrRepleaceTempView注册临时表,再通过sql语句查询

df.createOrReplaceTempView(“tablename”)
spark.sql(“select xxx from tablename where xxx”)

使用编程方式定义RDD模式

  1. 导入包
    import org.Apache.spark.sqltypes
    import org.Apache.spark.sql.Row
    
  2. 制作表头
    val fields = Array(StructField(“name”,StringType,true),StructField(“age”,IntegerType,true))
    val scheme = StructType(field)
    
  3. 制作表中的记录:将数据加载进来:
    val peopleRDD = spark.sparkContext.textFile(“xxx”)
    val rowRDD = peopleRDD.map(_.split(‘ ’)).map(attributes => Row(attributes(0),attributes(1).trim.toInt))
    
  4. 把表头和表中的记录拼装在一起
    val peopleDF = spark.createDataFrame(rowRDD,schema)
    peopleDF.createOrReplaceTempView(“people”)
    val results = spark.sql(“SELECT name,age from people”)
    
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值