Spark SQL初体验_第二章

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

  1. 读取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

发布了238 篇原创文章 · 获赞 429 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/qq_45765882/article/details/105560408