• 基于API和SQL的基本操作【DataFrame】


    写在前面:

    当得到一个DataFrame对象之后,可以使用对象提供的各种API方法进行直接调用,进行数据的处理。

      // =====基于dataframe的API=======之后的就都是DataFrame 的操作了==============
        infoDF.show()
        infoDF.filter(infoDF.col("age") > 30).show()
    

    另,也可以将DataFrame对象通过createOrReplaceTempView()方法,将其转为一张表,从而使用SQL来进行数据处理。

        // ======基于SQL的API===========DataFrame 创建为一张表================
        infoDF.createOrReplaceTempView("infos")
        spark.sql("select * from infos where age > 30").show()
    

    主要介绍一下API的基本操作,因为SQL的话,写法和传统的基本没差。

    DEMO1

    package february.sql
    
    import org.apache.spark.sql.SparkSession
    
    /**
      * Description: DataFrame API基本操作  直接读取Json文件为DataFrame对象
      *
      * @Author: 留歌36
      * @Date: 2019/2/24 17:54
      */
    object DataFrameApp {
      def main(args: Array[String]): Unit = {
        // Spark SQL的入口点是:SparkSession
       val spark = SparkSession.builder()
                                .appName(this.getClass.getSimpleName)
                                .master("local[2]")
                                .getOrCreate()
        // 将json文件加载成一个DataFrame
       val DF = spark.read.format("json").load("f:\user.json")
    
        // 输出dataframe对应的schema的信息
        DF.printSchema()
    
        // 输出数据集的前20条数据
        DF.show()
    
        // 查询某几列所有的数据:select name from table
        DF.select("name").show()
    
        // 查询某几列的所有数据,并对列进行计算:select name, age+10 from table;
        DF.select(DF.col("name"), (DF.col("age")+10).as("age2")).show()
    
        // 根据某一列的值,进行过滤。select * from table where age > 21
        DF.filter(DF.col("age") > 21).show()
    
        // 根据某一列进行分组,然后再进行聚合 select age,count(1) from table group by age
        DF.groupBy("age").count().show()
    
        spark.stop()
    
    
      }
    
    }
    
    

    DEMO2

    package february.sql
    
    import february.sql.DataFrameRDDApp.Info
    import org.apache.spark.sql.SparkSession
    
    /**
      * Description: DataFrame中的其他操作  读取TXT文件为RDD,再反射隐式转换为DataFrame对象
      *
      * @Author: 留歌36
      * @Date: 2019/2/25 19:31
      */
    object DataFrameCase {
      def main(args: Array[String]): Unit = {
        val spark = SparkSession.builder().appName(this.getClass.getSimpleName).master("local[2]").getOrCreate()
    
        // RDD => DataFrame
        val textFile = spark.sparkContext.textFile("f:\users.txt")
        textFile.foreach(println)
        // 注意这里的隐私转换,split("\|") 竖线需要转义
        import spark.implicits._
        val DF = textFile.map(_.split("\|")).map(line => Student(line(0).toInt, line(1), line(2), line(3))).toDF()
    
        DF.show()
        // show 方法默认只显示前20条记录,show()在这里被重载了很多次
        DF.show(30)
        DF.show(30,false) //不隐藏其余的
        // 返回前10条记录
        DF.take(10).foreach(println)
        DF.first()
        DF.head(5)
        DF.select("name","phone").show(30,false)
        //name字段为空或NULL的过滤出来
        DF.filter("name='' OR name='NULL'").show()
        // name 以M开头的
        DF.filter("SUBSTR(name,0,1)='留'").show()
    
        // 排序的使用,几种传递参数的方式
        DF.sort(DF.col("name").desc).show() //降序
        DF.sort(DF("name")).show()
        DF.sort("name").show()
        // 排序升级操作
        DF.sort("name", "id").show()
        DF.sort(DF("name").asc, DF("id").desc).show() //name的升序,id的降序
        // 修改查询的列名(别名的使用)
        DF.select(DF("name").as("stuent_name")).show()
    
       // join 操作
        val DF2 = textFile.map(_.split("\|")).map(line => Student(line(0).toInt, line(1), line(2), line(3))).toDF()
       // 默认内连接
        val joinDF = DF.join(DF2, DF("id") === DF2("id"))
    
        joinDF.show()
    
       //查看所有的内置函数
    //    spark.sql("show functions").show(1000)
        spark.stop()
    
      }
      case class Student(id: Int, name: String, phone: String,email: String)
    
    
    }
    
    

    更多相关小demo:每天一个程序:https://blog.csdn.net/liuge36/column/info/34094

  • 相关阅读:
    http协议头文件的控制信息 .
    http头文件详解
    java(计算机)常见加密算法详解
    设计模式系列命令模式
    dom对象模型浏览器对象的分层结构图
    验证码实现详解
    JAVA中使用FTPClient实现文件上传下载
    javax.crypto.Cipher类提供加密和解密功能,该类是JCE框架的核心。
    java中的使用RSA算法进行公钥加密私钥解密 .
    Httpservlet源码及实现机制详解
  • 原文地址:https://www.cnblogs.com/liuge36/p/10443976.html
Copyright © 2020-2023  润新知