最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spark SQL 編程初級(jí)實(shí)踐詳解

 更新時(shí)間:2023年04月20日 09:45:23   作者:WHYBIGDATA  
這篇文章主要為大家介紹了Spark SQL 編程初級(jí)實(shí)踐詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

寫在前面

  • Linux:CentOS7.5
  • Spark: spark-3.0.0-bin-hadoop3.2
  • IDE:IntelliJ IDEA2020.2.3

第1題:Spark SQL 基本操作

將下列 JSON 格式數(shù)據(jù)復(fù)制到 Linux 系統(tǒng)中,并保存命名為 employee.json。

{ "id":1 , "name":" Ella" , "age":36 }; { "id":2, "name":"Bob","age":29 }; { "id":3 , "name":"Jack","age":29 }; { "id":4 , "name":"Jim","age":28 } ;{ "id":4 , "name":"Jim","age":28 }; { "id":5 , "name":"Damon" } ;{ "id":5 , "name":"Damon" }

為 employee.json 創(chuàng)建 DataFrame,并寫出 Scala 語句完成下列操作:

  • 第1小題:查詢所有數(shù)據(jù);
  • 第2小題:查詢所有數(shù)據(jù),并去除重復(fù)的數(shù)據(jù);
  • 第3小題:查詢所有數(shù)據(jù),打印時(shí)去除 id 字段;
  • 第4小題:篩選出 age>30 的記錄;
  • 第5小題:將數(shù)據(jù)按 age 分組;
  • 第6小題:將數(shù)據(jù)按 name 升序排列;
  • 第7小題:取出前 3 行數(shù)據(jù);
  • 第8小題:查詢所有記錄的 name 列,并為其取別名為 username;
  • 第9小題:查詢年齡 age 的平均值;
  • 第10小題:查詢年齡 age 的最小值。

主程序代碼

import org.apache.spark.sql.{DataFrame, SparkSession}
object t1 {
   def main(args: Array[String]): Unit = {
       val spark: SparkSession = SparkSession.builder()
         .appName("t1")
         .master("local[2]")
         .getOrCreate()
       import spark.implicits._
       val df: DataFrame = spark.read.json("dataset/ch05/employee.json")
//        df.show()
//        df.distinct().show()
//        df.drop("id").show()
//        df.filter(df("age") > 20).show()
//        df.groupBy("name").count().show()
//        df.sort(df("name").asc).show()
//        val rows = df.take(3)
//        rows.foreach(println)
//        df.select(df("name").as("username")).show()
//        df.agg("age" -> "avg").show()
       df.agg("age" -> "min").show()
   }
}

主程序執(zhí)行結(jié)果

下圖從上到下、從左到右以此為第一、二、三、…、十道題的執(zhí)行結(jié)果

本題很簡(jiǎn)單,就是相關(guān)方法的調(diào)用。

第2題:編程實(shí)現(xiàn)將 RDD 轉(zhuǎn)換為 DataFrame

題目

源文件內(nèi)容如下(包含 id,name,age):

1,Ella,36 2,Bob,29 3,Jack,29

請(qǐng)先將數(shù)據(jù)復(fù)制保存到 Linux 系統(tǒng)中,命名為 employee.txt,實(shí)現(xiàn)從 RDD 轉(zhuǎn)換得到 DataFrame,并按“id:1,name:Ella,age:36”的格式打印出 DataFrame 的所有數(shù)據(jù)。請(qǐng)寫出程序代碼。

主程序代碼

import org.apache.spark.sql.{DataFrame, SparkSession}
object t2 {
    def main(args: Array[String]): Unit = {
        val spark: SparkSession = SparkSession.builder()
          .appName("t1")
          .master("local[2]")
          .getOrCreate()
        val employeeInfo = spark.sparkContext.textFile("/input/dataset/employee.txt")
        import spark.implicits._
        val employeeDF: DataFrame = employeeInfo.map(_.split(","))
          .map(attributes =>
              Employee(attributes(0).trim.toInt, attributes(1), attributes(2).trim.toInt)
          ).toDF()
        employeeDF.createTempView("employee")
        val employeeRDD: DataFrame = spark.sql("select id, name, age from employee")
        employeeRDD.map(e => {
            "id:" + e(0) + ",name:" + e(1) + ",age:" + e(2)
        }).show(10, false)
    }
}
case class Employee(id: Long, name: String, age: Long) {
}

主程序執(zhí)行結(jié)果

本題重在map算子的使用并創(chuàng)建視圖執(zhí)行sql查詢,注意程序中要使用到import spark.implicits._,

第3題:編程實(shí)現(xiàn)利用 DataFrame 讀寫 MySQL 的數(shù)據(jù)

題目

(1)在 MySQL 數(shù)據(jù)庫中新建數(shù)據(jù)庫 sparktest,再創(chuàng)建表 employee,包含如表 6-2 所示的 兩行數(shù)據(jù)。

(2)配置 Spark 通過 JDBC 連接數(shù)據(jù)庫 MySQL,編程實(shí)現(xiàn)利用 DataFrame 插入如表 6-3 所 示的兩行數(shù)據(jù)到 MySQL 中,最后打印出 age 的最大值和 age 的總和。

主程序代碼

import java.util.Properties
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}
import org.apache.spark.sql.{DataFrame, Row, SparkSession}
object t3 {
    def main(args: Array[String]): Unit = {
        val spark: SparkSession = SparkSession.builder()
          .appName("t3")
          .master("local[2]")
          .getOrCreate()
        val employeeRDD: RDD[Array[String]] = spark.sparkContext.parallelize(
            Array("3 Mary F 26", "4 Tom M 23")).map(_.split(" ")
        )
        val schema: StructType = StructType(List(
            StructField("id", IntegerType, true),
            StructField("name", StringType, true),
            StructField("gender", StringType, true),
            StructField("age", IntegerType, true)
        ))
        val rowRDD: RDD[Row] = employeeRDD.map(p => Row(p(0).toInt, p(1).trim, p(2).trim, p(3).toInt))
        val df: DataFrame = spark.createDataFrame(rowRDD, schema)
        val properties = new Properties()
        properties.put("user", "root");
        properties.put("password", "123456");
        properties.put("driver", "com.mysql.jdbc.Driver");
        // serverTimezone=UTC語句需要跟在數(shù)據(jù)庫連接語句的第一個(gè)位置,否則會(huì)報(bào)錯(cuò)
        df.write.mode("append").jdbc("jdbc:mysql://localhost:3306/bd01_spark?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false",
            "bd01_spark.employee", properties)
        val jdbcDF: DataFrame = spark.read.format("jdbc")
          .option("url", "jdbc:mysql://localhost:3306/bd01_spark")
          .option("driver", "com.mysql.jdbc.Driver")
          .option("dbtable", "employee")
          .option("user", "root")
          .option("password", "123456")
          .load()
        jdbcDF.agg("age" -> "max", "age" -> "sum").show(10, false)
    }
}

本題主要在于MySQL的JDBC連接創(chuàng)建。

主程序執(zhí)行結(jié)果

以上就是Spark SQL 編程初級(jí)實(shí)踐詳解的詳細(xì)內(nèi)容,更多關(guān)于Spark SQL編程的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java如何打印完整的堆棧信息

    Java如何打印完整的堆棧信息

    這篇文章主要為大家介紹了Java如何打印完整的堆棧信息示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 基于Java中兩種jersey文件上傳方式

    基于Java中兩種jersey文件上傳方式

    這篇文章主要介紹了基于Java中兩種jersey文件上傳方式的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • Java中scheduleAtFixedRate的用法

    Java中scheduleAtFixedRate的用法

    如何正確使用Java中的scheduleAtFixedRate是一篇介紹Java中定時(shí)任務(wù)調(diào)度器的文章。它詳細(xì)介紹了scheduleAtFixedRate方法的用法、參數(shù)及作用,并給出了一些實(shí)例以幫助讀者更好地理解其使用。本文為Java開發(fā)人員提供了一些實(shí)用的技巧,幫助他們更好地管理和控制定時(shí)任務(wù)
    2023-04-04
  • Java ProcessBuilder執(zhí)行多次CMD命令的使用

    Java ProcessBuilder執(zhí)行多次CMD命令的使用

    本文介紹了Java的ProcessBuilder類,該類用于執(zhí)行外部命令,通過ProcessBuilder,我們可以在Java程序中靈活地執(zhí)行多次CMD命令,并控制輸入輸出流以及工作目錄等,感興趣的可以了解一下
    2024-11-11
  • Java多線程編程中的兩種常用并發(fā)容器講解

    Java多線程編程中的兩種常用并發(fā)容器講解

    這篇文章主要介紹了Java多線程編程中的兩種常用并發(fā)容器講解,分別是ConcurrentHashMap與ConcurrentHashMap,需要的朋友可以參考下
    2015-12-12
  • springboot配置mysql數(shù)據(jù)庫spring.datasource.url報(bào)錯(cuò)的解決

    springboot配置mysql數(shù)據(jù)庫spring.datasource.url報(bào)錯(cuò)的解決

    這篇文章主要介紹了springboot配置mysql數(shù)據(jù)庫spring.datasource.url報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java Clone接口和深拷貝詳解

    java Clone接口和深拷貝詳解

    今天小編就為大家分享一篇關(guān)于Java Clonable接口和深拷貝詳解上的深入了解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2021-08-08
  • SpringMVC攔截器零基礎(chǔ)掌握

    SpringMVC攔截器零基礎(chǔ)掌握

    攔截器(Interceptor)是一種動(dòng)態(tài)攔截方法調(diào)用的機(jī)制,在SpringMVC中動(dòng)態(tài)攔截控制器方法的執(zhí)行。本文將詳細(xì)講講SpringMVC中攔截器的概念及入門案例,感興趣的可以嘗試一下
    2023-03-03
  • SpringCloud遠(yuǎn)程服務(wù)調(diào)用三種方式及原理

    SpringCloud遠(yuǎn)程服務(wù)調(diào)用三種方式及原理

    本文給大家介紹SpringCloud遠(yuǎn)程服務(wù)調(diào)用實(shí)戰(zhàn)筆記,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2022-12-12
  • java單例五種實(shí)現(xiàn)模式解析

    java單例五種實(shí)現(xiàn)模式解析

    這篇文章主要介紹了java單例五種實(shí)現(xiàn)模式解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評(píng)論

玛纳斯县| 湘潭县| 曲靖市| 抚远县| 宁蒗| 丹棱县| 佛教| 津南区| 电白县| 如皋市| 江西省| 浠水县| 确山县| 陆良县| 贞丰县| 裕民县| 武清区| 通州区| 墨玉县| 托里县| 莒南县| 汕头市| 蛟河市| 额尔古纳市| 绥棱县| 墨脱县| 保康县| 榆社县| 荣昌县| 繁昌县| 贵定县| 日照市| 土默特右旗| 城市| 宁国市| 闻喜县| 潢川县| 宁津县| 叙永县| 崇文区| 晋城|