Spark SQL结构化数据文件处理

  • Spark SQL是Spark中的一个模块,主要用于进行结构化数据的处理。它提供的最核心的编程抽象,就是 DataFrame。
  • DataFrame=RDD+Schema 。 它其实和关系型数据库中的表非常类似,RDD可以认为是表中的数据,Schema是表结构信息。 DataFrame可以通过很多来源进行构建,包括:结构化的数据文件,Hive中的表,外部的关系型数据 库,以及RDD
  • Spark1.3出现的 DataFrame ,Spark1.6出现了 DataSet ,在Spark2.0中两者统一,DataFrame等于 DataSet[Row]

一、DataFrame的创建

1、要使用Spark SQL,首先需要创建一个SpakSession对象,可以通过SparkSession.builder().getOrCreate()方法获取

2、要是使用SpakSession创建DataFrame,可以使用spark.read操作,从不同类型的文件中加载数据创建DataFrame。

代码示例描述
sparkSession.read.json("D:\\bigdata/student.json")读取json格式的文本文件
sparkSession.read.csv("D:\\bigdata/student.json")读取csv格式的文本文件
sparkSession.read.text("D:\\bigdata/student.json")读取text格式的文本文件
sparkSession.read.parquet("D:\\bigdata/student.json")读取parquet格式的文本文件

 代码:

 def main(args: Array[String]): Unit = {    
    val conf = new SparkConf().setMaster("local")
    val sparkSession = 
    SparkSession.builder().appName("SqlDemoScala").config(conf).getOrCreate()
    val stuDf = sparkSession.read.json("D:\\bigdata/student.json")
    //打印student数据
    stuDf.show() 
 }

二、DataFrame常见操作

2.1、DEL风格操作

  • show() 查看DataFrame中的具体信息,默认显示所有,可以通过参数控制显示多少条数据
  • printSchema:查看dataFrame的Schema信息
  • select():查看DataFrame中选取部分的字段

val stuDf = sparkSession.read.json("D:\\bigdata/student.json")
//默认显示所有数据,可以通过参数控制显示多少条
stuDf.show(2)
stuDf.printSchema();

 

  • filter():实现条件查询,过滤出想要的结果
  • groupBy():对记录进行分组
  • sort():对特定的字段进行排序操作

 代码:

    stuDf.filter(stuDf("age")>=19).show();
    stuDf.groupBy("age").count().show();
    stuDf.sort(stuDf("age").desc).show()

结果:

 排序也可以如下写法,但想要添加隐式转换函数,否则语法报错:

   import sparkSession.implicits._
   stuDf.filter($"age">=19).show()

2.2 、SQL风格操作

DataFrame可以将它看成一个关系型数据表,然后在程序中使用spark.sql()的方式执行sq查看,使用sql风格的前提是要将dataFrame注册成一个临时表

 //将DataFrame注册一个临时表
 stuDf.createOrReplaceTempView("student")
 //使用sql查询临时表中的数据
 sparkSession.sql("select age,count(*) as num from student group by age")
 .show()
  sparkSession.stop()
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值