九十、Spark-SparkSQL(查询sql)

简介: 九十、Spark-SparkSQL(查询sql)

textFile文件读取


读取数据展示


78.png


代码


package org.example.SQL
import org.apache.log4j.{Level, Logger}
import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, SparkSession}
object Test4 { //查询sql
  def main(args: Array[String]): Unit = {
    Logger.getLogger("org").setLevel(Level.ERROR) //不打印日志
    val spark: SparkSession = SparkSession.builder().appName("test4").master("local").getOrCreate()
    val sc: SparkContext = spark.sparkContext
    val lines = sc.textFile("data/input/person.txt")
    val rdd: RDD[person] = lines.map { line => {
      val arr: Array[String] = line.split(" ")
      person(arr(0).toInt, arr(1), arr(2).toInt)
    }
    }
    import spark.implicits._
    val personDF: DataFrame = rdd.toDF() //转换为DataFrame
    personDF.printSchema()
    personDF.show()
    //--------------------SQL----------------------
    //注册表名
    personDF.createOrReplaceTempView("student")
    //查看name字段
    spark.sql("select name from student").show()
    //查看name和age字段
    spark.sql("select name,age from student").show()
    //查看所有age和name字段,并将age+1
    spark.sql("select name,age,age+1 from student").show()
    //过滤age>=25的
    spark.sql("select name,age from student where age<25").show()
    //统计年龄大于35的人数
    spark.sql("select count(*) from student where age>35").show()
    //按年龄进行分组并统计相同年龄的人数
    spark.sql("select age,count(*) from student group by age").show()
    //查询姓名等于张三的
    spark.sql("select name from student where name = 'zhangsan' ").show()
  }
  case class person(id: Int, name: String, age: Int)
}

约束


77.png


数据表


76.png


数据过滤


+--------+
|    name|
+--------+
|zhangsan|
|    lisi|
|  wangwu|
| zhaoliu|
|  tianqi|
|    kobe|
+--------+
+--------+---+
|    name|age|
+--------+---+
|zhangsan| 20|
|    lisi| 29|
|  wangwu| 25|
| zhaoliu| 30|
|  tianqi| 35|
|    kobe| 40|
+--------+---+
+--------+---+---------+
|    name|age|(age + 1)|
+--------+---+---------+
|zhangsan| 20|       21|
|    lisi| 29|       30|
|  wangwu| 25|       26|
| zhaoliu| 30|       31|
|  tianqi| 35|       36|
|    kobe| 40|       41|
+--------+---+---------+


+--------+---+
|    name|age|
+--------+---+
|zhangsan| 20|
+--------+---+
+--------+
|count(1)|
+--------+
|       1|
+--------+
+---+--------+
|age|count(1)|
+---+--------+
| 20|       1|
| 40|       1|
| 35|       1|
| 25|       1|
| 29|       1|
| 30|       1|
+---+--------+
+--------+
|    name|
+--------+
|zhangsan|
+--------+
相关文章
|
16天前
|
SQL 存储 人工智能
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
Vanna 是一个开源的 Python RAG(Retrieval-Augmented Generation)框架,能够基于大型语言模型(LLMs)为数据库生成精确的 SQL 查询。Vanna 支持多种 LLMs、向量数据库和 SQL 数据库,提供高准确性查询,同时确保数据库内容安全私密,不外泄。
83 7
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
|
23天前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
34 8
|
1月前
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
53 4
|
1月前
|
SQL 监控 关系型数据库
SQL语句当前及历史信息查询-performance schema的使用
本文介绍了如何使用MySQL的Performance Schema来获取SQL语句的当前和历史执行信息。Performance Schema默认在MySQL 8.0中启用,可以通过查询相关表来获取详细的SQL执行信息,包括当前执行的SQL、历史执行记录和统计汇总信息,从而快速定位和解决性能瓶颈。
|
1月前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
120 10
|
1月前
|
SQL 关系型数据库 MySQL
|
2月前
|
SQL 数据库 开发者
功能发布-自定义SQL查询
本期主要为大家介绍ClkLog九月上线的新功能-自定义SQL查询。
|
1月前
|
SQL JSON 分布式计算
【赵渝强老师】Spark SQL的数据模型:DataFrame
本文介绍了在Spark SQL中创建DataFrame的三种方法。首先,通过定义case class来创建表结构,然后将CSV文件读入RDD并关联Schema生成DataFrame。其次,使用StructType定义表结构,同样将CSV文件读入RDD并转换为Row对象后创建DataFrame。最后,直接加载带有格式的数据文件(如JSON),通过读取文件内容直接创建DataFrame。每种方法都包含详细的代码示例和解释。
|
1月前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
33 0
|
2月前
|
SQL 数据可视化 BI
SQL语句及查询结果解析:技巧与方法
在数据库管理和数据分析中,SQL语句扮演着至关重要的角色
下一篇
DataWorks