• Spark SQL


    1.DataFrame与RDD的区别

      RDD是分布式的 Java对象的集合

      DataFrame是一种以RDD为基础的分布式数据集,也就是分布式的Row对象的集合(每个Row对象代表一行记录),提供了详细的结构信息,也就是我们经常说的模式(schema).简单理解就是类似表

    2.Schema 是什么

             DataFrame中提供了详细的数据结构信息,从而使得SparkSQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么,

     DataFrame中的数据结构信息,即为schema。

    3.

     people.json 文件:

    {"name":"小周","age":88}
    {"name":"小红", "age":30}
    {"name":"李行", "age":19}
    {"name":"小翠", "age":88}

    /**
      * Created by soyo on 17-10-10.
      */
    import org.apache.spark.{SparkConf, SparkContext}
    import org.apache.spark.sql.SparkSession
    object Spark_Sql {
    
      def main(args: Array[String]): Unit = {
        val conf=new SparkConf().setAppName("soyo").setMaster("local[2]")// 写这两条语句不用设置-Dspark.master=local
        val sc=new SparkContext(conf)                                    //
         val spark=SparkSession.builder().getOrCreate()
        val df= spark.read.json("file:///home/soyo/桌面/spark编程测试数据/people.json")
         df.show()
         df.printSchema()
        df.select(df("name"),df("age")+5).show()
        df.filter(df("age")>20).show()
        df.groupBy("age").count().show()
        df.sort(df("age").desc).show()
        df.select(df("name").as("姓名"),df("age").as("年龄")).sort(df("age").desc).show()
        df.select("name","age").write.format("csv").save("file:///home/soyo/桌面/spark编程测试数据/people_json.csv") //DF的保存(方法一)
        df.rdd.saveAsTextFile("file:///home/soyo/桌面/spark编程测试数据/people_save.txt")//DF的保存(方法二)
        //再次加载
        val text=sc.textFile("file:///home/soyo/桌面/spark编程测试数据/people_json.csv")
        text.foreach(println)
      }
    
    }

    运行结果:

    +---+----+
    |age|name|
    +---+----+
    | 88|  小周|
    | 30|  小红|
    | 19|  李行|
    | 88|  小翠|
    +---+----+

    root
     |-- age: long (nullable = true)
     |-- name: string (nullable = true)

    +----+---------+
    |name|(age + 5)|
    +----+---------+
    |  小周|       93|
    |  小红|       35|
    |  李行|       24|
    |  小翠|       93|
    +----+---------+

    +---+----+
    |age|name|
    +---+----+
    | 88|  小周|
    | 30|  小红|
    | 88|  小翠|
    +---+----+

    +---+-----+
    |age|count|
    +---+-----+
    | 19|    1|
    | 88|    2|
    | 30|    1|
    +---+-----+

    +---+----+
    |age|name|
    +---+----+
    | 88|  小周|
    | 88|  小翠|
    | 30|  小红|
    | 19|  李行|
    +---+----+

    +---+---+
    | 姓名| 年龄|
    +---+---+
    | 小周| 88|
    | 小翠| 88|
    | 小红| 30|
    | 李行| 19|
    +---+---+

    小周,88
    小红,30
    李行,19
    小翠,88

  • 相关阅读:
    最长公共子序列
    小测试 炒书
    洛谷P1968 美元汇率
    洛谷P3611 [USACO17JAN]Cow Dance Show奶牛舞蹈
    【刷题】【树】【模拟】树网的核
    【刷题】【dp】地精的贸易
    【刷题】【模拟】复制cs
    【刷题】【模拟】3n+1
    【刷题】【dp】中国象棋
    【刷题】【搜索】新数独
  • 原文地址:https://www.cnblogs.com/soyo/p/7647638.html
Copyright © 2020-2023  润新知