天天看點

Spark之【SparkSQL程式設計】系列(No4)——《IDEA建立SparkSQL程式》

        在之前的部落格SparkSQL系列中,已經大緻為大家介紹了

DataFrame

,

DataSet

的概念以及它們之間與

RDD

之間的互轉的操作描述。本篇部落格,為大家帶來的是關于如何在IDEA上建立SparkSQL程式,并實作資料查詢與(DataFrame,DataSet,RDD)互相轉換的功能!
Spark之【SparkSQL程式設計】系列(No4)——《IDEA建立SparkSQL程式》

文章目錄

    • IDEA中建立SparkSQL程式
      • <1>資料查詢
      • <2>類型轉化

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.11</artifactId>
    <version>2.1.1</version>
</dependency>
           
{"name":"Michael"}
{"name":"Andy", "age":30}
{"name":"Justin", "age":19}
           

object SparkSQL01_Demo {

  def main(args: Array[String]): Unit = {

    // 建立配置對象
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("SparkSQL01_Demo")

    // 建立 SparkSQL的環境變量
    // SparkConf()
    val spark = SparkSession
      .builder()
      .config(sparkConf)
      .getOrCreate()

    // 導入隐式轉換
    import spark.implicits._

    val df = spark.read.json("in/people.json")

    // 查詢所有資料
    df.show()

    // 過濾器查詢
    df.filter($"age">21).show()

    // 建立臨時表
    df.createOrReplaceTempView("persons")

    // Sparksql 查詢
    spark.sql("SELECT * FROM persons where age > 21").show()
    
    // 釋放資源
    spark.stop()

  }
}

           

object SparkSQL02_SQL {

  def main(args: Array[String]): Unit = {

    // 建立配置對象
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("SparkSQL01_Demo")

    // 建立 SparkSQL的環境變量
    // SparkSession()
    val spark:SparkSession = SparkSession
      .builder()
      .config(sparkConf)
      .getOrCreate()


    // 導入隐式轉換
    // 這裡的spark不是包名的含義,是SparkSession對象的名字
    import spark.implicits._


    // 建立RDD
  val rdd: RDD[(Int, String, Int)] = spark.sparkContext.makeRDD(List((1,"zhangsan",20),(2,"lisi",30),(3,"wangwu",40)))


    // 轉換為DF,需給出結構
    val df: DataFrame = rdd.toDF("id","name","age")

    // 轉換為DS,需給出類型
    val ds: Dataset[User] = df.as[User]

    // 轉換為DF
    val df1: DataFrame = ds.toDF()

    // 轉換為RDD
    val rdd1: RDD[Row] = df1.rdd

    //通路
    rdd1.foreach(row=>{
      // 擷取資料時,可以通過索引通路資料
      println(row.getInt(0))
    })


    // 釋放資源
    spark.stop()

  }

  // 定義一個樣例類
  case class User(id:Int,name:String,age:Int)
}
           

繼續閱讀