SparkSQL驱动为SparkSession
SparkSession可以执行SparkSQL也可以执行HiveSQL
1、创建DataFrame
创读取文本文件
1.在本地创建一个文件,有id、name、age三列,用空格分隔,然后上传到hdfs上
vim /root/person.txt
1 zhangsan 20
2 lisi 29
3 wangwu 25
4 zhaoliu 30
5 tianqi 35
6 kobe 40
上传数据文件到HDFS上:
hadoop fs -put /root/person.txt /
2.在spark shell执行下面命令,读取数据,将每一行的数据使用列分隔符分割
打开spark-shell
/export/servers/spark/bin/spark-shell
创建RDD
val lineRDD= sc.textFile(“hdfs://node01:8020/person.txt”).map(_.split(" ")) //RDD[Array[String]]
3.定义case class(相当于表的schema)
case class Person(id:Int, name:String, age:Int)
4.将RDD和case class关联
val personRDD = lineRDD.map(x => Person(x(0).toInt, x(1), x(2).toInt)) //RDD[Person]
5.将RDD转换成DataFrame
val personDF = personRDD.toDF //DataFrame
6.查看数据和schema
personDF.show
±–±-------±–+
| id| name|age|
±–±-------±–+
| 1|zhangsan| 20|
| 2| lisi| 29|
| 3| wangwu| 25|
| 4| zhaoliu| 30|
| 5| tianqi| 35|
| 6| kobe| 40|
±–±-------±–+
//元数据结构
personDF.printSchema
7.注册表
personDF.createOrReplaceTempView(“t_person”)
8.执行SQL
spark.sql(“select id,name from t_person where id > 3”).show
9.也可以通过SparkSession构建DataFrame
val dataFrame=spark.read.text(“hdfs://hadoop01:8020/person.txt”)
dataFrame.show //注意:直接读取的文本文件没有完整schema信息
dataFrame.printSchema
- 读取json文件
1.数据文件
使用spark安装包下的json文件
/export/servers/spark/examples/src/main/resources/people.json
{“name”:“Michael”}
{“name”:“Andy”, “age”:30}
{“name”:“Justin”, “age”:19}
2.在spark shell执行下面命令,读取数据
val jsonDF= spark.read.json(“file:///export/servers/spark/examples/src/main/resources/people.json”)
3.接下来就可以使用DataFrame的函数操作
jsonDF.show
//注意:直接读取json文件有schema信息,因为json文件本身含有Schema信息,SparkSQL可以自动解析
2.2.3.读取parquet文件
1.数据文件
使用spark安装包下的parquet文件
/export/servers/spark/examples/src/main/resources/users.parquet
2.在spark shell执行下面命令,读取数据
val parquetDF=spark.read.parquet(“file:///export/servers/spark/examples/src/main/resources/users.parquet”)
3.接下来就可以使用DataFrame的函数操作
parquetDF.show
//注意:直接读取parquet文件有schema信息,因为parquet文件中保存了列的信息
2、创建DataSet
1.通过spark.createDataset创建Dataset
val fileRdd = sc.textFile(“hdfs://node01:8020/person.txt”) //RDD[String]
val ds1 = spark.createDataset(fileRdd) //DataSet[String]
ds1.show
2.通RDD.toDS方法生成DataSet
case class Person(name:String, age:Int)
val data = List(Person(“zhangsan”,20),Person(“lisi”,30)) //List[Person]
val dataRDD = sc.makeRDD(data)
val ds2 = dataRDD.toDS //Dataset[Person]
ds2.show
3.通过DataFrame.as[泛型]转化生成DataSet
case class Person(name:String, age:Long)
val jsonDF= spark.read.json(“file:///export/servers/spark/examples/src/main/resources/people.json”)
val jsonDS = jsonDF.as[Person] //DataSet[Person]
jsonDS.show
4.DataSet也可以注册成表进行查询
jsonDS.createOrReplaceTempView(“t_person”)
spark.sql(“select * from t_person”).show