SparkSQL
程序员文章站
2024-01-30 15:13:58
...
RDD和DataFrame、DateSet关系
DataFrame=RDD-泛型+schema+sql+优化
DataSet=RDD+schema+sql+优化
DataFrame=DataSet[Row]
DataSet=DataFrame.as[Row]
DataFrame劣势
Dataframe的劣势在于在编译期缺少类型安全检查,导致运行时出错。
RDD、DataFrame、DataSet三者之间的转换总结
RDD-》DF、DS:调用toDF、toDS方法
DF、DS-》RDD:调用rdd方法
DF-》DS:DF.as[Row]
DS-》DF:调用toDF方法
SParkSQL查询风格
DSL风格:使用算子进行操作,对编程能力有一定的要求
SQL风格:典型的SQL语句,对数据库管理员和一些会写SQL语句的程序员好用。(注意:在使用SQL风格查询时,必须将数据注册成一张表)
SparkSQL代码程序入口
//创建SparkSQL程序入口
val spark: SparkSession = SparkSession.builder().appName("demo").master("local[*]").getOrCreate()
//SparkSession封装了SParkContext
val sc: SparkContext = spark.sparkContext
//减少日志打印,与程序入口无关
sc.setLogLevel("WARN")
SparkSQL代码(DSL风格和SQL风格)
package bigdata
import org.apache.spark.SparkContext
import org.apache.spark.sql.{DataFrame, SparkSession}
object Demo02 {
def main(args: Array[String]): Unit = {
//创建SparkSQL程序入口
val spark: SparkSession = SparkSession.builder().appName("demo").master("local[*]").getOrCreate()
//SparkSession封装了SParkContext
val sc: SparkContext = spark.sparkContext
//减少日志打印,与程序入口无关
sc.setLogLevel("WARN")
//加载json文件
val personDF: DataFrame = spark.read.json("D:\\test\\data\\people.json")
/* //展示表内容
personDF.show()
//查看schema信息
personDF.printSchema()*/
//使用DSL风格查询年龄大于30岁的数据
//完全体写法
// personDF.select(personDF.col("name"),personDF.col("age")).show()
//导包
import spark.implicits._
//使用DSL风格查询年龄大于30的数据
personDF.filter($"age">30).show()
//使用SQL风格查询年龄大于30 的数据
//使用SQL风格前必须将数据注册成一张表
personDF.createOrReplaceTempView("t_person")
spark.sql("select * from t_person where age >30").show()
}
}