通过IDEA编写SparkSQL代码_第三章

通过IDEA编写SparkSQL代码
创建DataFrame/DataSet
第1种:指定列名添加Schema
第2种:通过StructType指定Schema
第3种:编写样例类,利用反射机制推断Schema
数据tt.txt:

1 zhangsan 20
2 lisi 29
3 wangwu 25
4 zhaoliu 30
5 tianqi 35
6 kobe 40

第一种:指定列名添加Schema

//1、创建sparksession对象
val spark: SparkSession = SparkSession.builder().master(“local[*]”).appName(“Demo01”).getOrCreate()
//2、通过sparksession对象或得到sparkcontext
val sc = spark.sparkContext
//3、读取数据,转换成RDD
val datas: RDD[String] = sc.textFile(“file:///F:\第二学期\12\05-Spark\资料\tt.txt”)
val lineRDD: RDD[Array[String]] = datas.map(.split(" "))
//类型转换
val rowRDD = lineRDD.map(a=>(a(0).toInt,a(1),a(2).toInt))
//隐式转换 作用:为对象添加原本不具有的功能/方法
//scala中隐式转换实现了为RDD添加toDF和toDS的方法
import spark.implicits.

//4、转换成DF/DS
val PersonDF: DataFrame = rowRDD.toDF(“id”,“name”,“age”)
//5、通过SQL查询数据
PersonDF.show()

第二种方 通过StructType指定Schema

def main(args: Array[String]): Unit = {
//1、创建sparksession
val spark: SparkSession = SparkSession.builder().master(“local[*]”).appName(“demo01”).getOrCreate()
//2、创建sparkcontext
val sc: SparkContext = spark.sparkContext
//3、读取数据。并操作
val ttRDD: RDD[String] = sc.textFile(“file:///F:\第二学期\34\05-Spark\资料\tt.txt”)
val lineDatas: RDD[Array[String]] = ttRDD.map(a=>a.split(" "))
val RowRDD: RDD[Row] = lineDatas.map(x=>Row(x(0).toInt,x(1),x(2).toInt))
//设置表结构 注意导入的包 import org.apache.spark.sql.types._
val schema: StructType = StructType(List(StructField(“id”,IntegerType,true),StructField(“name”,StringType,true),StructField(“age”,IntegerType,true)))
val DataDF: DataFrame = spark.createDataFrame(RowRDD,schema)
//4、查看数据
DataDF.show()
DataDF.printSchema()
//StructType形式不能使用$ 符号调用变量
//DataDF.filter($“age”>25).show
//5、关闭 sparksession sparkcontext
sc.stop()
spark.stop()
}

第三种方法 编写样例类,利用反射机制推断Schema

//准备样例类
case class Person(id:Int,name:String,age:Int)
def main(args: Array[String]): Unit = {
//1、创建sparksession
val spark: SparkSession = SparkSession.builder().master(“local[*]”).appName(“demo01”).getOrCreate()
//2、创建sparkcontext
val sc: SparkContext = spark.sparkContext
//3、读取数据。并操作
val ttRDD: RDD[String] = sc.textFile(“file:///F:\第二学期\34\05-Spark\资料\tt.txt”)
val lineDatas: RDD[Array[String]] = ttRDD.map(a=>a.split(" "))
//遍历每一行数据 传递到样例类中
val personRDD: RDD[Person] = lineDatas.map(z=>Person(z(0).toInt,z(1),z(2).toInt))
//调用隐式转换
import spark.implicits._
val DataDF: DataFrame = personRDD.toDF()
//4、查看数据
DataDF.show()
DataDF.printSchema()
//5、关闭 sparksession sparkcontext
sc.stop()
spark.stop()
}

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

猜你喜欢

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