Spark 中 Dataset.show 如何使用?有哪些值得注意的地方?

2023-12-08 08:48

本文主要是介绍Spark 中 Dataset.show 如何使用?有哪些值得注意的地方?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见大数据技术体系


WHAT

Dataset.show 在我们平常 Spark 开发测试中经常使用。

它可以用来展示 Dataset


重载方法

def show(numRows: Int): Unitdef show(): Unitdef show(truncate: Boolean): Unitdef show(numRows: Int, truncate: Boolean): Unitdef show(numRows: Int, truncate: Int): Unitdef show(numRows: Int, truncate: Int, vertical: Boolean): Unit

使用注意点

上面的 6 个重载方法有哪些值得注意的地方呢?

1. vertical

show() 方法存在 2 种打印模式

默认是横式的,如下所示:

  year  month AVG('Adj Close) MAX('Adj Close)1980  12    0.503218        0.5951031981  01    0.523289        0.5703071982  02    0.436504        0.4752561983  03    0.410516        0.4421941984  04    0.450090        0.483521

另一种是竖式的,如下所示:

-RECORD 0-------------------year            | 1980month           | 12AVG('Adj Close) | 0.503218AVG('Adj Close) | 0.595103
-RECORD 1-------------------year            | 1981month           | 01AVG('Adj Close) | 0.523289AVG('Adj Close) | 0.570307
-RECORD 2-------------------year            | 1982month           | 02AVG('Adj Close) | 0.436504AVG('Adj Close) | 0.475256
-RECORD 3-------------------year            | 1983month           | 03AVG('Adj Close) | 0.410516AVG('Adj Close) | 0.442194
-RECORD 4-------------------year            | 1984month           | 04AVG('Adj Close) | 0.450090AVG('Adj Close) | 0.483521

2. numRows

show() 方法可以通过设置 numRows 来控制最终返回多少行数据,默认 20。

3. truncate

  1. show() 方法可以通过设置 truncate 参数来控制单个数据列字符串最长显示的长度,并且所有列都会靠右对齐。
  2. 字符串如果超过 truncate(默认是 20),将会截取前面的 truncate - 3 长度,后面再加上 ...
str.substring(0, truncate - 3) + "..."
  1. 对于数据类型是 Array[Byte] 的数据列,会用"[", " ", "]" 的格式输出
binary.map("%02X".format(_)).mkString("[", " ", "]")

Dataset.show 具体的源码解析请参考我的这篇博客——Spark SQL 工作流程源码解析(四)optimization 阶段(基于 Spark 3.3.0)


实践

源码下载

spark-examples 代码已开源,本项目致力于提供最具实践性的 Apache Spark 代码开发学习指南。

点击链接前往 github 下载源码:spark-examples


数据

{"name": "Alice","age": 18,"sex": "Female","addr": ["address_1","address_2", " address_3"]}
{"name": "Thomas","age": 20, "sex": "Male","addr": ["address_1"]}
{"name": "Tom","age": 50, "sex": "Male","addr": ["address_1","address_2","address_3"]}
{"name": "Catalina","age": 30, "sex": "Female","addr": ["address_1","address_2"]}

代码

package com.shockang.study.spark.sql.showimport com.shockang.study.spark.SQL_DATA_DIR
import com.shockang.study.spark.util.Utils.formatPrint
import org.apache.spark.sql.SparkSession/**** @author Shockang*/
object ShowExample {val DATA_PATH: String = SQL_DATA_DIR + "user.json"def main(args: Array[String]): Unit = {val spark = SparkSession.builder.master("local[*]").appName("ShowExample").getOrCreate()spark.sparkContext.setLogLevel("ERROR")spark.read.json(DATA_PATH).createTempView("t_user")val df = spark.sql("SELECT * FROM t_user")formatPrint("""df.show""")df.showformatPrint("""df.show(2)""")df.show(2)formatPrint("""df.show(true)""")df.show(true)formatPrint("""df.show(false)""")df.show(false)formatPrint("""df.show(2, truncate = true)""")df.show(2, truncate = true)formatPrint("""df.show(2, truncate = false)""")df.show(2, truncate = false)formatPrint("""df.show(2, truncate = 0)""")df.show(2, truncate = 0)formatPrint("""df.show(2, truncate = 20)""")df.show(2, truncate = 20)formatPrint("""df.show(2, truncate = 0, vertical = true)""")df.show(2, truncate = 0, vertical = true)formatPrint("""df.show(2, truncate = 20, vertical = true)""")df.show(2, truncate = 20, vertical = true)formatPrint("""df.show(2, truncate = 0, vertical = false)""")df.show(2, truncate = 0, vertical = false)formatPrint("""df.show(2, truncate = 20, vertical = false)""")df.show(2, truncate = 20, vertical = false)spark.stop()}
}

打印

========== df.show ==========
+--------------------+---+--------+------+
|                addr|age|    name|   sex|
+--------------------+---+--------+------+
|[address_1, addre...| 18|   Alice|Female|
|         [address_1]| 20|  Thomas|  Male|
|[address_1, addre...| 50|     Tom|  Male|
|[address_1, addre...| 30|Catalina|Female|
+--------------------+---+--------+------+========== df.show(2) ==========
+--------------------+---+------+------+
|                addr|age|  name|   sex|
+--------------------+---+------+------+
|[address_1, addre...| 18| Alice|Female|
|         [address_1]| 20|Thomas|  Male|
+--------------------+---+------+------+
only showing top 2 rows========== df.show(true) ==========
+--------------------+---+--------+------+
|                addr|age|    name|   sex|
+--------------------+---+--------+------+
|[address_1, addre...| 18|   Alice|Female|
|         [address_1]| 20|  Thomas|  Male|
|[address_1, addre...| 50|     Tom|  Male|
|[address_1, addre...| 30|Catalina|Female|
+--------------------+---+--------+------+========== df.show(false) ==========
+----------------------------------+---+--------+------+
|addr                              |age|name    |sex   |
+----------------------------------+---+--------+------+
|[address_1, address_2,  address_3]|18 |Alice   |Female|
|[address_1]                       |20 |Thomas  |Male  |
|[address_1, address_2, address_3] |50 |Tom     |Male  |
|[address_1, address_2]            |30 |Catalina|Female|
+----------------------------------+---+--------+------+========== df.show(2, truncate = true) ==========
+--------------------+---+------+------+
|                addr|age|  name|   sex|
+--------------------+---+------+------+
|[address_1, addre...| 18| Alice|Female|
|         [address_1]| 20|Thomas|  Male|
+--------------------+---+------+------+
only showing top 2 rows========== df.show(2, truncate = false) ==========
+----------------------------------+---+------+------+
|addr                              |age|name  |sex   |
+----------------------------------+---+------+------+
|[address_1, address_2,  address_3]|18 |Alice |Female|
|[address_1]                       |20 |Thomas|Male  |
+----------------------------------+---+------+------+
only showing top 2 rows========== df.show(2, truncate = 0) ==========
+----------------------------------+---+------+------+
|addr                              |age|name  |sex   |
+----------------------------------+---+------+------+
|[address_1, address_2,  address_3]|18 |Alice |Female|
|[address_1]                       |20 |Thomas|Male  |
+----------------------------------+---+------+------+
only showing top 2 rows========== df.show(2, truncate = 20) ==========
+--------------------+---+------+------+
|                addr|age|  name|   sex|
+--------------------+---+------+------+
|[address_1, addre...| 18| Alice|Female|
|         [address_1]| 20|Thomas|  Male|
+--------------------+---+------+------+
only showing top 2 rows========== df.show(2, truncate = 0, vertical = true) ==========
-RECORD 0----------------------------------addr | [address_1, address_2,  address_3] age  | 18                                 name | Alice                              sex  | Female                             
-RECORD 1----------------------------------addr | [address_1]                        age  | 20                                 name | Thomas                             sex  | Male                               
only showing top 2 rows========== df.show(2, truncate = 20, vertical = true) ==========
-RECORD 0--------------------addr | [address_1, addre... age  | 18                   name | Alice                sex  | Female               
-RECORD 1--------------------addr | [address_1]          age  | 20                   name | Thomas               sex  | Male                 
only showing top 2 rows========== df.show(2, truncate = 0, vertical = false) ==========
+----------------------------------+---+------+------+
|addr                              |age|name  |sex   |
+----------------------------------+---+------+------+
|[address_1, address_2,  address_3]|18 |Alice |Female|
|[address_1]                       |20 |Thomas|Male  |
+----------------------------------+---+------+------+
only showing top 2 rows========== df.show(2, truncate = 20, vertical = false) ==========
+--------------------+---+------+------+
|                addr|age|  name|   sex|
+--------------------+---+------+------+
|[address_1, addre...| 18| Alice|Female|
|         [address_1]| 20|Thomas|  Male|
+--------------------+---+------+------+
only showing top 2 rows

这篇关于Spark 中 Dataset.show 如何使用?有哪些值得注意的地方?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/469247

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他