zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    如何将网格式报表打印成其它样式
    拥有与实力不相称的脾气是种灾难——北漂18年(23)
    8.8.1 Optimizing Queries with EXPLAIN
    mysql 没有rowid 怎么实现根据rowid回表呢?
    secondary index
    8.5.5 Bulk Data Loading for InnoDB Tables 批量数据加载
    mysql 中key 指的是索引
    8.5.4 Optimizing InnoDB Redo Logging 优化InnoDB Redo 日志
    8.5.3 Optimizing InnoDB Read-Only Transactions 优化InnoDB 只读事务
    8.5.1 Optimizing Storage Layout for InnoDB Tables InnoDB表的存储布局优化
  • 原文地址:https://www.cnblogs.com/soyo/p/7647638.html
Copyright © 2011-2022 走看看