iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SparkSQL编程初级实践详解
  • 327
分享到

SparkSQL编程初级实践详解

SparkSQL编程实战SparkSQL 2023-05-16 17:05:45 327人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录写在前面第1题:spark sql 基本操作主程序代码主程序执行结果第2题:编程实现将 RDD 转换为 DataFrame题目主程序代码主程序执行结果第3题:编程实现利用 Dat

写在前面

第1题:Spark SQL 基本操作

将下列 JSON 格式数据复制到 Linux 系统中,并保存命名为 employee.json。

{ "id":1 , "name":" Ella" , "age":36 }; { "id":2, "name":"Bob","age":29 }; { "id":3 , "name":"Jack","age":29 }; { "id":4 , "name":"Jim","age":28 } ;{ "id":4 , "name":"Jim","age":28 }; { "id":5 , "name":"Damon" } ;{ "id":5 , "name":"Damon" }

为 employee.json 创建 DataFrame,并写出 Scala 语句完成下列操作:

  • 第1小题:查询所有数据;
  • 第2小题:查询所有数据,并去除重复的数据;
  • 第3小题:查询所有数据,打印时去除 id 字段;
  • 第4小题:筛选出 age>30 的记录;
  • 第5小题:将数据按 age 分组;
  • 第6小题:将数据按 name 升序排列;
  • 第7小题:取出前 3 行数据;
  • 第8小题:查询所有记录的 name 列,并为其取别名为 username;
  • 第9小题:查询年龄 age 的平均值;
  • 第10小题:查询年龄 age 的最小值。

主程序代码

import org.apache.spark.sql.{DataFrame, SparkSession}
object t1 {
   def main(args: Array[String]): Unit = {
       val spark: SparkSession = SparkSession.builder()
         .appName("t1")
         .master("local[2]")
         .getOrCreate()
       import spark.implicits._
       val df: DataFrame = spark.read.json("dataset/ch05/employee.json")
//        df.show()
//        df.distinct().show()
//        df.drop("id").show()
//        df.filter(df("age") > 20).show()
//        df.groupBy("name").count().show()
//        df.sort(df("name").asc).show()
//        val rows = df.take(3)
//        rows.foreach(println)
//        df.select(df("name").as("username")).show()
//        df.agg("age" -> "avg").show()
       df.agg("age" -> "min").show()
   }
}

主程序执行结果

下图从上到下、从左到右以此为第一、二、三、…、十道题的执行结果

本题很简单,就是相关方法的调用。

第2题:编程实现将 RDD 转换为 DataFrame

题目

源文件内容如下(包含 id,name,age):

1,Ella,36 2,Bob,29 3,Jack,29

请先将数据复制保存到 Linux 系统中,命名为 employee.txt,实现从 RDD 转换得到 DataFrame,并按“id:1,name:Ella,age:36”的格式打印出 DataFrame 的所有数据。请写出程序代码。

主程序代码

import org.apache.spark.sql.{DataFrame, SparkSession}
object t2 {
    def main(args: Array[String]): Unit = {
        val spark: SparkSession = SparkSession.builder()
          .appName("t1")
          .master("local[2]")
          .getOrCreate()
        val employeeInfo = spark.sparkContext.textFile("/input/dataset/employee.txt")
        import spark.implicits._
        val employeeDF: DataFrame = employeeInfo.map(_.split(","))
          .map(attributes =>
              Employee(attributes(0).trim.toInt, attributes(1), attributes(2).trim.toInt)
          ).toDF()
        employeeDF.createTempView("employee")
        val employeeRDD: DataFrame = spark.sql("select id, name, age from employee")
        employeeRDD.map(e => {
            "id:" + e(0) + ",name:" + e(1) + ",age:" + e(2)
        }).show(10, false)
    }
}
case class Employee(id: Long, name: String, age: Long) {
}

主程序执行结果

本题重在map算子的使用并创建视图执行sql查询,注意程序中要使用到import spark.implicits._

第3题:编程实现利用 DataFrame 读写 mysql 的数据

题目

(1)在 MySQL 数据库中新建数据库 sparktest,再创建表 employee,包含如表 6-2 所示的 两行数据。

(2)配置 Spark 通过 JDBC 连接数据库 MySQL,编程实现利用 DataFrame 插入如表 6-3 所 示的两行数据到 MySQL 中,最后打印出 age 的最大值和 age 的总和。

主程序代码

import java.util.Properties
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}
import org.apache.spark.sql.{DataFrame, Row, SparkSession}
object t3 {
    def main(args: Array[String]): Unit = {
        val spark: SparkSession = SparkSession.builder()
          .appName("t3")
          .master("local[2]")
          .getOrCreate()
        val employeeRDD: RDD[Array[String]] = spark.sparkContext.parallelize(
            Array("3 Mary F 26", "4 Tom M 23")).map(_.split(" ")
        )
        val schema: StructType = StructType(List(
            StructField("id", IntegerType, true),
            StructField("name", StringType, true),
            StructField("gender", StringType, true),
            StructField("age", IntegerType, true)
        ))
        val rowRDD: RDD[Row] = employeeRDD.map(p => Row(p(0).toInt, p(1).trim, p(2).trim, p(3).toInt))
        val df: DataFrame = spark.createDataFrame(rowRDD, schema)
        val properties = new Properties()
        properties.put("user", "root");
        properties.put("passWord", "123456");
        properties.put("driver", "com.mysql.jdbc.Driver");
        // serverTimezone=UTC语句需要跟在数据库连接语句的第一个位置,否则会报错
        df.write.mode("append").jdbc("jdbc:mysql://localhost:3306/bd01_spark?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false",
            "bd01_spark.employee", properties)
        val jdbcDF: DataFrame = spark.read.fORMat("jdbc")
          .option("url", "jdbc:mysql://localhost:3306/bd01_spark")
          .option("driver", "com.mysql.jdbc.Driver")
          .option("dbtable", "employee")
          .option("user", "root")
          .option("password", "123456")
          .load()
        jdbcDF.agg("age" -> "max", "age" -> "sum").show(10, false)
    }
}

本题主要在于MySQL的JDBC连接创建。

主程序执行结果

以上就是Spark SQL 编程初级实践详解的详细内容,更多关于Spark SQL编程的资料请关注编程网其它相关文章!

--结束END--

本文标题: SparkSQL编程初级实践详解

本文链接: https://www.lsjlt.com/news/210411.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SparkSQL编程初级实践详解
    目录写在前面第1题:Spark SQL 基本操作主程序代码主程序执行结果第2题:编程实现将 RDD 转换为 DataFrame题目主程序代码主程序执行结果第3题:编程实现利用 Dat...
    99+
    2023-05-16
    Spark SQL编程实战 Spark SQL
  • SparkStreaming编程初级实践详解
    目录写在前面1. 安装Flume安装命令2.使用Avro数据源测试Flume题目描述Flume配置文件执行命令执行结果如下3. 使用netcat数据源测试Flume题目描述编写Flu...
    99+
    2023-05-16
    Spark Streaming编程初级 Spark Streaming
  • Go语言初探:编译过程详解
    标题:Go语言初探:编译过程详解 Go语言是一种开源的编译型静态语言,由谷歌开发,旨在提升编程效率和简化工程管理。作为一种现代化的编程语言,它具有出色的并发支持和高效的垃圾回收机制,同...
    99+
    2024-04-02
  • PHP高级编程技巧详解
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-16
  • Python面向对象编程-初级篇
    前言面向对象 : 采用基于对象(实体) 的概念建立模型,模拟客观世界分析、设计、实现软件的办法。面向对象编程(Object-oriented Programming,简称 OOP)是一种解决软件复用的设计和编程方法,把软件系统中相近相似的操...
    99+
    2023-05-14
    Python 面向 对象
  • C++元编程语言初步入门详解
    目录模板泛型初步函数模板友元模板参数元编程的基本概念可变参数模板模板 由于模板元编程需要以面向对象为基础,所以如有疑问之处可以先补充一点C++面向对象的知识: C++面向对象这一篇就...
    99+
    2024-04-02
  • PHP高级特性:安全编程的最佳实践
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-15
  • Golang实现Json分级解析及数字解析实践详解
    目录一、背景介绍二、解决方案(1)将Json直接解析为map(2)解析部分json struct的方法 (json.RawMessage的用法)(3) json.Number类型的使...
    99+
    2023-02-14
    Golang Json分级解析 Golang Json解析 Golang Json
  • Python图形编程探索系列-01-初级
    设计一个主窗口,在其中添加三个标签和三个按钮,当点击按钮时,对标签的内容和色彩进行修改。 import tkinter as tk root = tk.Tk() def f1(): label1.config(text='...
    99+
    2023-01-30
    图形 系列 Python
  • JavaScript异步编程之Promise的初步使用详解
    1. 概述 Promise对象是ES6提出的的异步编程的规范。说到异步编程,就不得不说说同步和异步这两个概念。 从字面意思理解同步编程的话,似乎指的是两个任务同步运行,如果这样理解就...
    99+
    2024-04-02
  • 【JavaEE初阶】 线程池详解与实现
    文章目录 🌴线程池的概念🎄标准库中的线程池🍀ThreadPoolExecutor 类🚩corePoolSize与maximumP...
    99+
    2023-10-25
    java-ee java 开发语言 jdk 计算机操作系统 线程池
  • Golang并发编程之调度器初始化详解
    目录0. 简介1. 一些全局变量2. main函数之前2.1 初始化g02.2 主线程与m0的绑定2.3 m0和g0的绑定2.4 调度器的初始化0. 简介 上一篇博客简单介绍了GMP...
    99+
    2023-03-22
    Golang调度器初始化 Golang调度器 Go 调度器
  • PHP高级特性:面向对象编程的最佳实践
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-16
  • PHP中的OOP编程实践
    随着互联网的发展,PHP作为一种非常流行的服务器端编程语言,成为了很多Web开发人员的首选。随着技术的发展和语言本身的改进,越来越多的PHP开发者开始采用面向对象编程(OOP)的方式来进行开发。在本文中,我们将讨论PHP中的OOP编程实践。...
    99+
    2023-05-25
    实践 PHP OOP
  • 头歌实践教学平台Python-Python第二章作业(初级)
    第1关:三角形周长及面积 任务描述 输入的三角形的三条边a、b、c 的长度,计算并依次输出三角形的周长和面积,结果严格保留2位小数。测试用例的数据保证三角形三边数据可以构成三角形。 三角形面积计算公式: ,其中s=(a+b+c)/2。 a...
    99+
    2023-09-22
    python 单元测试
  • kafka生产实践(详解)
    1.引言最近接触到一个APP流量分析的项目,类似于友盟。涉及到几个C端(客户端)高并发的接口,这几个接口主要用于C端数据的提交。在没有任何缓冲的情况下,一个接口涉及到5张表的提交。压测的结果很不理想,主要瓶颈就在与RDS的交互。一台双核,1...
    99+
    2023-05-31
    kafka 实践 生产
  • PHP面向对象编程:高级特性详解
    php 的 oop 高级特性包括:接口:定义方法,确保不同类具有相似行为。多态性:子类对象实现父类方法,提供灵活性。命名空间:组织代码,避免命名冲突。特性:复用代码,无需继承即可添加方法...
    99+
    2024-05-10
    php 面向对象编程 php面向对象编程
  • LeetCode路径指南:Java编程的高级技巧和最佳实践。
    LeetCode路径指南:Java编程的高级技巧和最佳实践 LeetCode是一个非常受欢迎的在线编程平台,它提供了海量的算法题目,帮助程序员提升编程技能。Java作为一门流行的编程语言,也在LeetCode上得到了广泛应用。但是,如何才能...
    99+
    2023-09-24
    leetcode path 分布式
  • C#接口编程详细降级
    这篇文章主要介绍“C#接口编程详细降级”,在日常操作中,相信很多人在C#接口编程详细降级问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#接口编程详细降级”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!接口...
    99+
    2023-06-17
  • KubeSphere分级管理实践及解析
    目录前言为什么要在 KuberSphere 上实现分级管理什么是分级体系如何实现分级管理如何实现资源的升降级不同层级间 Pod 的网络隔离总结前言 K8s 是容器编排和分布式应用部署...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作