zoukankan      html  css  js  c++  java
  • 【Spark】DataFrame关于数据常用操作


    DSL语法

    概述

    1.查看全表数据 —— DataFrame.show
    2.查看部分字段数据(有4种方法)
     (1) DataFrame.select("字段名称").show
     (2) DataFrame.select($"字段名称").show(推荐)
     (3) DataFrame.select(col("字段名称")).show
     (4) DataFrame.select(DataFrame.col("字段名称")).show
    如果要查询多个字段,方法一样,后面跟着添加字段即可
    3.打印schema信息 —— DataFrame.printSchema
    4.查询多个字段,并对其中一个字段的值做+1的操作 —— DataFrame.select($"字段名称1",$"字段名称2",$"字段名称2" + 1)
    5.过滤,拿到想要的数据 —— DataFrame.filter(条件).show
    6.数据分组并计数 —— DataFrame.groupBy("字段名称").count().show

    实例操作

    // 查询全表数据
    scala> personDF.show
    +---+--------+---+
    | id|    name|age|
    +---+--------+---+
    |  1|zhangsan| 20|
    |  2|    lisi| 29|
    |  3|  wangwu| 25|
    |  4| zhaoliu| 30|
    |  5|  tianqi| 35|
    |  6|    kobe| 40|
    +---+--------+---+
    
    // 查询部分字段
    // 方法一
    scala> personDF.select(personDF.col("name")).show
    +--------+
    |    name|
    +--------+
    |zhangsan|
    |    lisi|
    |  wangwu|
    | zhaoliu|
    |  tianqi|
    |    kobe|
    +--------+
    //方法二
    scala> personDF.select(col("name")).show
    +--------+
    |    name|
    +--------+
    |zhangsan|
    |    lisi|
    |  wangwu|
    | zhaoliu|
    |  tianqi|
    |    kobe|
    +--------+
    //方法三
    scala> personDF.select($"name").show
    +--------+
    |    name|
    +--------+
    |zhangsan|
    |    lisi|
    |  wangwu|
    | zhaoliu|
    |  tianqi|
    |    kobe|
    +--------+
    //方法四
    scala> personDF.select("name").show
    +--------+
    |    name|
    +--------+
    |zhangsan|
    |    lisi|
    |  wangwu|
    | zhaoliu|
    |  tianqi|
    |    kobe|
    +--------+
    
    // 打印schema信息
    scala> personDF.printSchema
    root
     |-- id: integer (nullable = false)
     |-- name: string (nullable = true)
     |-- age: integer (nullable = false)
    
    // 查询所有的name和age,并将age+1
    scala> personDF.select($"name",$"age",$"age"+1).show
    +--------+---+---------+
    |    name|age|(age + 1)|
    +--------+---+---------+
    |zhangsan| 20|       21|
    |    lisi| 29|       30|
    |  wangwu| 25|       26|
    | zhaoliu| 30|       31|
    |  tianqi| 35|       36|
    |    kobe| 40|       41|
    +--------+---+---------+
    
    // 过滤age大于等于25的,使用filter方法过滤
    scala> personDF.filter($"age" > 25).show
    +---+-------+---+
    | id|   name|age|
    +---+-------+---+
    |  2|   lisi| 29|
    |  4|zhaoliu| 30|
    |  5| tianqi| 35|
    |  6|   kobe| 40|
    +---+-------+---+
    
    // 按年龄进行分组并统计相同年龄的人数
    scala> personDF.groupBy($"age").count.show
    +---+-----+                                                                     
    |age|count|
    +---+-----+
    | 20|    1|
    | 40|    1|
    | 35|    1|
    | 25|    1|
    | 29|    1|
    | 30|    1|
    +---+-----+
    

    SQL语法

    概述

    首先有一个必要的操作,就是把DataFrame注册成为一张table —— DataFrame.registerTmpTable("tbl_name")
    然后用该格式填入sql语句即可 —— spark.sql("sql语句").show

    实例操作

    // 注册临时表
    scala> personDF.registerTempTable("person")
    warning: there was one deprecation warning; re-run with -deprecation for details
    
    // 全表查询
    scala> spark.sql("select * from person").show
    +---+--------+---+
    | id|    name|age|
    +---+--------+---+
    |  1|zhangsan| 20|
    |  2|    lisi| 29|
    |  3|  wangwu| 25|
    |  4| zhaoliu| 30|
    |  5|  tianqi| 35|
    |  6|    kobe| 40|
    +---+--------+---+
    
    // 以name和age分组,查询年龄大于25岁的数据
    scala> spark.sql("select name,age from person where age > 25 group by name,age").show
    +-------+---+
    |   name|age|
    +-------+---+
    |   lisi| 29|
    |   kobe| 40|
    |zhaoliu| 30|
    | tianqi| 35|
    +-------+---+
    
  • 相关阅读:
    HDOJ1024(最大M子段和)
    HDOJ1025(最长上升子序列)
    HDOJ1022(模拟栈)
    HDOJ(1018)
    HDOJ1238(string)
    HDOJ1015(简单深搜)
    HDOJ1016(标准dfs)
    Tabbar视图切换,返回上一视图,添加item
    页面转换方法
    网络状态判断
  • 原文地址:https://www.cnblogs.com/zzzsw0412/p/12772388.html
Copyright © 2011-2022 走看看