003-90-14【SparkSQLDFDS】龙井村寸头二大爷家女儿小红用GPT 学习DataFrame 的创建和使用--入门教程

【SparkSQL&DF&DS】DataFrame 的创建和使用

  • 【SparkSQL&DF&DS】2,DataFrame 的创建和使用
    • 1, 创建
    • 2, show
    • 3, printSchema
    • 4, select...show
    • 5, filter
    • 6, group by...count
    • 7,创建局部视图和全局视图
    • 8,spark sql

【SparkSQL&DF&DS】2,DataFrame 的创建和使用

1, 创建

val spark = SparkSession.builder().master("local[*]").appName("Spark SQL basic example").config("spark.some.config.option", "some-value").getOrCreate()
// $example on:create_df$
val df: DataFrame = spark.read.json("spark-demo/src/main/resources/people.json")

2, show

// Displays the content of the DataFrame to stdout
df.show()
// +----+-------+
// | age|   name|
// +----+-------+
// |null|Michael|
// |  30|   Andy|
// |  19| Justin|
// +----+-------+
// $example off:create_df$

3, printSchema

// $example on:untyped_ops$
// This import is needed to use the $-notation
import spark.implicits._
// Print the schema in a tree format
df.printSchema()
// root
// |-- age: long (nullable = true)
// |-- name: string (nullable = true)

4, select…show

// Select only the "name" column
df.select("name").show()
// +-------+
// |   name|
// +-------+
// |Michael|
// |   Andy|
// | Justin|
// +-------+// Select everybody, but increment the age by 1
df.select($"name", $"age" + 1).show()
// +-------+---------+
// |   name|(age + 1)|
// +-------+---------+
// |Michael|     null|
// |   Andy|       31|
// | Justin|       20|
// +-------+---------+
// df.select($"name", $"age" + 1).show() 这里的$ 是什么语法
// 在Spark中,$符号是一个特殊的语法,用于创建一个Column对象。Column对象表示一个数据集中的列,并提供了各种操作和转换方法。
// 在您提供的代码中,$符号用于创建Column对象,表示要选择的列。例如,$"name"表示选择名为"name"的列,$"age" + 1表示对名为"age"的列的值加1。
// 使用$符号可以使代码更加简洁和易读,同时也能够提供静态类型检查,以避免在运行时发生错误。
// 需要注意的是,$符号需要导入spark.implicits._,以便在Spark中使用该语法。通常,导入语句如下所示:
// import spark.implicits._
// df.select($"name", $"age" + 1).show 【正确:表达式表是把age 作为一列,此时$"age" + 1 返回的是列对象】
// df.select("name", "age" + 1).show【报错,没有age1列】

5, filter

// Select people older than 21
df.filter($"age" > 21).show()
// +---+----+
// |age|name|
// +---+----+
// | 30|Andy|
// +---+----+

6, group by…count

// Count people by age
df.groupBy("age").count().show()
// +----+-----+
// | age|count|
// +----+-----+
// |  19|    1|
// |null|    1|
// |  30|    1|
// +----+-----+
// $example off:untyped_ops$

7,创建局部视图和全局视图

// $example on:run_sql$
// Register the DataFrame as a SQL temporary view
df.createOrReplaceTempView("people")
//
// Spark Dataset 货 DataFrame 注册临时视图的方法:
// 在 Spark 中,可以将 Dataset 或 DataFrame 注册为临时视图(Temporary View),以便在 SQL 查询中使用。注册表可以有以下几种形式:
// 临时视图(Temporary View):使用 createOrReplaceTempView 方法可以将 Dataset 或 DataFrame 注册为临时视图。
// 临时视图的作用范围限制在当前的 SparkSession 实例中。示例代码如下:
// scala dataset.createOrReplaceTempView("tempViewName")
// 全局临时视图(Global Temporary View):使用 createOrReplaceGlobalTempView 方法可以将 Dataset 或 DataFrame 注册为全局临时视图。
// 全局临时视图的作用范围跨越多个 SparkSession 实例,可以在不同的 SparkSession 实例之间共享。示例代码如下:
// scala dataset.createOrReplaceGlobalTempView("globalTempViewName")
// 持久化视图(Persisted View):使用 createOrReplaceTempView 方法将 Dataset 或 DataFrame 注册为临时视图后,
// 可以使用 CACHE 或 PERSIST 命令将其持久化到磁盘中,以便在后续查询中重用。示例代码如下:
// spark.sql("CACHE TABLE tempViewName")
// spark.sql("PERSIST TABLE tempViewName")
//
// spark cache 和 persist 的区别
// 在 Spark 中,cache 和 persist 都用于将数据持久化到内存或磁盘中,以便在后续的查询中重用。它们的主要区别在于持久化级别的选择和默认行为。
// 持久化级别:cache 方法是 persist 方法的简化形式,它使用默认的持久化级别 MEMORY_ONLY,将数据持久化到内存中。
// 而 persist 方法可以接受一个自定义的持久化级别参数(StorageLevel),您可以根据需要选择不同的级别,例如 MEMORY_AND_DISK、DISK_ONLY 等。
// 默认行为:cache 方法将数据持久化到内存中,相当于使用 persist 方法指定了默认的持久化级别为 MEMORY_ONLY。
// 而 persist 方法可以根据您的需求选择不同的持久化级别,默认情况下为 MEMORY_ONLY。
// 无论是使用 cache 还是 persist,当数据被持久化时,Spark 会尝试尽可能地将数据存储在内存中,以提供最佳的性能。
// 如果内存不足以容纳所有数据,Spark 将会将一部分数据溢写到磁盘上。
// 需要注意的是,通过持久化数据,可以避免在后续查询中重新计算数据,从而提高查询性能。
// 但是,持久化数据也会占用内存或磁盘空间,因此在选择持久化级别时需要权衡性能和资源消耗。
//
// spark.sql("PERSIST TABLE tempViewName") 的存储级别的指定:
// 在 Spark 中,PERSIST TABLE 语句并没有直接指定存储级别的选项。
// 持久化的存储级别是由 Spark 的配置属性 spark.sql.sources.default 决定的。
// 默认情况下,spark.sql.sources.default 的值为 inMemory,表示将表持久化到内存中。
// 您可以通过设置该属性来更改默认的持久化级别。
// 以下是设置 spark.sql.sources.default 属性为 disk 的示例代码:
// import org.apache.spark.sql.SparkSession
// val spark = SparkSession.builder()
//   .appName("Example")
//   .config("spark.sql.sources.default", "disk")
//   .getOrCreate()
// // 执行 PERSIST TABLE 语句
// spark.sql("PERSIST TABLE tempViewName")
//
// sparkSession 可以在运行的时候改变“spark.sql.source.default”的内容吗?
// 在 Spark 中,spark.sql.sources.default 是一个静态的配置属性,
// 它在 SparkSession 创建时被读取,一旦 SparkSession 创建完成后,就不能直接更改这个属性的值。
// 如果您想要在运行时更改 spark.sql.sources.default 的值,
// 您可以通过创建一个新的 SparkSession 来实现。在新创建的 SparkSession 中,您可以指定不同的属性值。
// 以下是一个示例代码,演示如何在运行时更改 spark.sql.sources.default 的值:
// import org.apache.spark.sql.SparkSession
// val spark = SparkSession.builder()
//   .appName("Example")
//   .config("spark.sql.sources.default", "disk")
//   .getOrCreate()
// // 创建新的 SparkSession,更改 `spark.sql.sources.default` 的值
// val newSpark = SparkSession.builder()
//   .config("spark.sql.sources.default", "inMemory")
//   .getOrCreate()
// // 使用新的 SparkSession 执行操作
// newSpark.sql("PERSIST TABLE tempViewName")
// 在上面的示例中,我们首先创建了一个 SparkSession,并将 spark.sql.sources.default 的值设置为 "disk"。
// 然后,我们创建了一个新的 SparkSession,并将 spark.sql.sources.default 的值设置为 "inMemory"。
// 在新的 SparkSession 中,我们可以使用新的属性值执行操作,例如执行 PERSIST TABLE 语句。
// 需要注意的是,创建新的 SparkSession 可能会导致额外的资源开销,因此在实际应用中,需要权衡资源的使用和操作的需要。

8,spark sql

val sqlDF = spark.sql("SELECT * FROM people")
sqlDF.show()
// +----+-------+
// | age|   name|
// +----+-------+
// |null|Michael|
// |  30|   Andy|
// |  19| Justin|
// +----+-------+
// $example off:run_sql$// $example on:global_temp_view$
// Register the DataFrame as a global temporary view
df.createGlobalTempView("people")// Global temporary view is tied to a system preserved database `global_temp`
spark.sql("SELECT * FROM global_temp.people").show()
// 不加global 也可以访问。
spark.sql("SELECT * FROM people").show()
// +----+-------+
// | age|   name|
// +----+-------+
// |null|Michael|
// |  30|   Andy|
// |  19| Justin|
// +----+-------+// Global temporary view is cross-session,
// 不同的session 之间可以共享global_temp 的数据
spark.newSession().sql("SELECT * FROM global_temp.people").show()
// +----+-------+
// | age|   name|
// +----+-------+
// |null|Michael|
// |  30|   Andy|
// |  19| Justin|
// +----+-------+
// spark.newSession 的作用?
// spark.newSession 是 Spark 中的一个方法,用于创建一个新的 SparkSession 对象。
// SparkSession 是 Spark 2.0 引入的一个编程入口,用于与 Spark 进行交互和执行操作。它是 Spark 中最核心的概念之一,代表了一个与 Spark 集群的连接。
// 使用 spark.newSession 方法可以创建一个新的 SparkSession 对象,该对象具有独立的配置和上下文。这在某些情况下是有用的,例如:
// 并行执行任务:通过创建多个独立的 SparkSession 对象,可以并行执行多个任务,每个任务都有自己的配置和上下文。这对于同时处理多个数据集或任务非常有用。
// 隔离配置和状态:每个 SparkSession 对象都有自己的配置和状态,可以独立设置和修改。这样可以避免不同任务之间的相互干扰和影响。
// 需要注意的是,SparkSession 是 Spark 2.x 版本中的概念,如果您使用的是较早版本的 Spark,可能没有 SparkSession 类。在早期版本中,可以使用 SparkContext 对象来与 Spark 进行交互。
// 如下回报错:
// 需要指定默认的schema: global_temp
// spark.newSession().sql("SELECT * FROM people").show()
// $example off:global_temp_view$

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/624917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【INTEL(ALTERA)】错误 (19021):相同的文件名 xx 用于不同的 IP 文件。同一个名称不能用于多个 IP 文件。

说明 由于在英特尔 Quartus Prime Pro Edition 软件版本 22.3 上运行 CVP 设计时出现问题,使用 IP 升级工具自动更新复位释放英特尔 FPGA IP可能会导致同一 IP 的 .qip 和 .ip 文件包含在英特尔 Quartus设置文件中。这将产生如下所示的错误。 错误 (19…

Kotlin 协程 asyn和launch简单使用

在 Kotlin 协程中,async 和 launch 都是协程构建器,但它们有一些重要的区别: 返回值: launch 函数返回一个 Job 对象,代表一个在后台执行的任务。Job 可以用于等待任务完成、取消任务等操作。async 函数返回一个 Defer…

x-cmd pkg | howdoi - 用于替代浏览器搜索编程问题的命令行工具

目录 简介首次用户技术特点竞品和相关作品进一步阅读 简介 howdoi 一个在终端中查找编程问题的命令行工具和 python 库,可用于从堆栈溯源(Stack Overflow)等编程社区获取搜索问题的答案,并将它们以代码片段的形式显示在命令行中。…

使用记事本修复DBC文件问题V2.0

没想过这种文章也能出第二篇,有个信号没解析出来。 问题现象 回放报文的时候发现需要的信号没有解析出来,报文一共有10个信号,只出来9个。 问题分析 首先就是排查DBC文件,在对应的报文里面有没有这个信号。发现是有的&#xff…

POI-tl 知识整理:整理5 -> 开发一个插件

实现一个插件就是要告诉我们在模板的某个地方用某些数据做某些事情,我们可以通过实现RenderPolicy接口开发自己的插件 模板 1 写一个将标签替换为Hello, world的插件 import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.policy.RenderPolicy; import…

pandas进行数据计算时如何处理空值的问题?

目录 1.数据预览: 2.解决方法 (1)问题示例 (2)方法 A.方法一 B.方法二 1.数据预览: 2.解决方法 (1)问题示例 如下图如果不理睬这些空值的话,计算总分便也会是空值…

如何部署Wagtail CMS并结合cpolar内网穿透实现远程访问管理界面

文章目录 前言1. 安装并运行Wagtail1.1 创建并激活虚拟环境 2. 安装cpolar内网穿透工具3. 实现Wagtail公网访问4. 固定的Wagtail公网地址 前言 Wagtail是一个用Python编写的开源CMS,建立在Django Web框架上。Wagtail 是一个基于 Django 的开源内容管理系统&#xf…

树莓派4B +Ubuntu20.04+ROS1的使用(2)

首先确定一下主机与从机的ip地址(非常重要) 在这次实验中,主机是一台Ubuntu20.04.03系统的台式机,我们间通过这台准备来远程遥控树莓派上的ros1系统,它的ip地址是192.168.230.181 从机是一台搭载Ubuntu20.04桌面版ro…

pom文件冲突引起的Excel无法下载

问题一:之前生产环境上可以进行下载Excel的功能突然不能用了 报错提示信息: NoClassDefFoundError: Could not initialize class org.apache.poi.xssf.usermodel.XSSFWorkbook, 在最开始初始化的时候找不到对应的类,虽然我的Libr…

力扣 | 49. 字母异位词分组

这里使用HashMap Java package _49;import java.util.*;public class Problem_49_GroupAnagrams {public List<List<String>> groupAngrams(String [] strs){Map<String,List<String>> map new HashMap<>(); // int [] arr new int[]{}…

十三、Three场景物体增加发光特效

物体发光效果非常炫酷,本期来讲three场景内物体自带发光效果怎么来实现。本次使用的是threejs138版本,在vue3+vite+ant的项目中使用。 下面来看看实现的效果。绿色罐体有了明显的发光效果。 实现步骤 增加composer.js import { UnrealBloomPass } from three/examples/jsm/po…

vue前端开发自学,子组件传递数据给父组件,使用$emit

vue前端开发自学,子组件传递数据给父组件,使用$emit 父子组件之间互相传递数据的情况非常常见&#xff0c;下面为大家介绍的是&#xff0c;来自子组件&#xff0c;给父组件传递数据的情况。 <template><h3>组件事件demo</h3><Child someEvent"getI…

数据库SQL面经--第二弹

事物的ACID&#xff08;基本要素&#xff09; 原子性&#xff08;Atomicity&#xff09;&#xff1a;事务是一个原子操作单元&#xff0c;要么全部执行成功&#xff0c;要么全部回滚到操作前的状态&#xff0c;不会停留在中间状态。一致性&#xff08;Consistency&#xff09;&…

第08章_面向对象编程(高级)拓展练习(关键字:static,代码块,关键字:final,抽象类和抽象方法,接口,内部类,枚举类,注解,包装类)

文章目录 第08章_面向对象编程&#xff08;高级&#xff09;拓展练习01-关键字&#xff1a;static1、银行账户类2、图形类3、数组工具类4、二分查找5、二分查找6、素数7、阅读代码&#xff0c;分析运行结果8、阅读代码&#xff0c;分析运行结果 02-代码块9、阅读代码&#xff0…

rocketmq实现延迟队列思路探讨

大家好&#xff0c;我是了不起&#xff0c;专为小白解决痛点的了不起。 一、非任意时间 1、修改 在服务器端&#xff08;rocketmq-broker端&#xff09;的属性配置文件中加入以下行&#xff1a; messageDelayLevel1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h …

Vue高级(二)

3.搭建vuex环境 创建文件&#xff1a;src/store/index.js //引入Vue核心库import Vue from vue//引入Vueximport Vuex from vuex//应用Vuex插件Vue.use(Vuex)//准备actions对象——响应组件中用户的动作const actions {}//准备mutations对象——修改state中的数据const mutat…

No module named ‘fcntl‘

问题详情 (base) PS D:\yolov5-master_head> gunicorn -c gunicorn.py wsgi:app Traceback (most recent call last):File "<frozen runpy>", line 198, in _run_module_as_mainFile "<frozen runpy>", line 88, in _run_codeFile "C…

Mantle: A Programmable Metadata Load Balancer for the Ceph File System——论文泛读

SC 2015 Paper 元数据论文阅读汇总 问题 优化Ceph的元数据局部性和负载平衡。 现有方法 提高元数据服务性能的最常见技术是在专用的元数据服务器&#xff08;MDS&#xff09;节点之间平衡负载 [16, 25, 26, 21, 28]。常见的方法是鼓励独立增长并减少通信&#xff0c;使用诸…

中文 DarkVoxel Wiki | CSDN

DarkVoxel Wiki 游戏DarkVoxel的中文百科~ 欢迎来到DarkVoxel Wiki&#xff01; 本wiki于 2024/1/15 迁自 Fandom Wiki&#xff08;因为 Fandom 实在是太烂了&#xff09;以后wiki在这里更新&#xff0c;B站专栏只会发布每个版本的更新内容之类的简单资讯&#xff1b;相关视…

【物以类聚】给el-image预览多张图片增加提示文字,让每张图片有所分类

【物以类聚】给el-image预览多张图片增加提示文字&#xff0c;让每张图片有所分类 一、需求二、el-image三、实施步骤3.1 导包3.2 改造3.3 引入 三、效果 一、需求 点击地图上的一张图片&#xff0c;弹出所有相关的图片资源&#xff0c;图片资源上显示每个图片的所属类型。 二…