欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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()



  }
}