背景

本文基于Spark 4.0

总结

Spark中的 VariantType 类型,用尽量少的字节来存储Json的格式化数据

分析

这里主要介绍 Variant 的存储,我们从VariantBuilder.buildJson方法(把对应的json数据存储为VariantType类型)开始:

public static Variant parseJson(JsonParser parser, boolean allowDuplicateKeys)throws IOException {VariantBuilder builder = new VariantBuilder(allowDuplicateKeys);builder.buildJson(parser);return builder.result();}

这个方法会调用buildJson这个方法:

JsonToken token = parser.currentToken();if (token == null) {throw new JsonParseException(parser, "Unexpected null token");}switch (token) {case START_OBJECT: {ArrayList<FieldEntry> fields = new ArrayList<>();int start = writePos;while (parser.nextToken() != JsonToken.END_OBJECT) {String key = parser.currentName();parser.nextToken();int id = addKey(key);fields.add(new FieldEntry(key, id, writePos - start));buildJson(parser);}finishWritingObject(start, fields);break;}case START_ARRAY: {ArrayList<Integer> offsets = new ArrayList<>();int start = writePos;while (parser.nextToken() != JsonToken.END_ARRAY) {offsets.add(writePos - start);buildJson(parser);}finishWritingArray(start, offsets);break;}case VALUE_STRING:appendString(parser.getText());break;case VALUE_NUMBER_INT:try {appendLong(parser.getLongValue(

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

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

相关文章

跨越十年的C++演进:C++20新特性全解析

跨越十年的C演进系列&#xff0c;分为5篇&#xff0c;本文为第四篇&#xff0c;后续会持续更新C23~ 前3篇如下&#xff1a; 跨越十年的C演进&#xff1a;C11新特性全解析 跨越十年的C演进&#xff1a;C14新特性全解析 跨越十年的C演进&#xff1a;C17新特性全解析 C20标准…

LeetCode--40.组合总和II

前言&#xff1a;如果你做出来了39题&#xff0c;但是遇到40题就不会做了&#xff0c;那我建议你去再好好缕清39题的思路&#xff0c;再来看这道题&#xff0c;会有种豁然开朗的感觉解题思路&#xff1a;这道题其实与39题基本一致&#xff0c;所以本次题解是借着39题为基础来讲…

Docker Desktop 安装到D盘(包括镜像下载等)+ 汉化

目录 一、 开启电脑虚拟化 1. 搜索并打开控制面板 2. 点击程序 3. 点击启用或关闭 Windows 功能 4. 打开相关功能 5. 没有Hyper-V的情况&#xff1a; 二、配置环境 1. 更新 WSL 到最新版 2. 设置 WSL 2为默认版本 3. 安装 Ubuntu 三. WSL 迁移到D盘 1. 停止运行wsl…

基于 OpenCV 的图像 ROI 切割实现

一、引言 在计算机视觉领域&#xff0c;我们经常需要处理各种各样的图像数据。有时候&#xff0c;我们只对图像中的某一部分区域感兴趣&#xff0c;例如在一张人物照片中&#xff0c;我们可能只关注人物的脸部。在这种情况下&#xff0c;将我们感兴趣的区域从整个图像中切割出…

Linux操作系统01

一、操作系统简史 二、Linux诞生与分支 三、Linux内核与发行版 内核版本号&#xff1a;cat /proc/version 、 u name -a 操作系统内核漏洞 【超详细】CentOS编译安装升级新内核_centos源码编译安装新版本内核 ntfs-CSDN博客 四、虚拟机 五、Docker容器技术 典型靶场集成环境…

Chrome 下载文件时总是提示“已阻止不安全的下载”的解决方案

解决 Chrome 谷歌浏览器下载文件时提示“已阻止不安全的下载”的问题。 ‍ 前言 最近更新 Chrome 后&#xff0c;下载文件时总是提示“已拦截未经验证的下载内容”、“已阻止不安全的下载”&#xff1a; ‍ 身为一个互联网冲浪高手&#xff0c;这些提醒非常没有必要&#x…

RocketMQ延迟消息是如何实现的?

RocketMQ的延迟消息实现机制非常巧妙&#xff0c;其核心是通过多级时间轮 定时任务 消息重投递来实现的。以下是详细实现原理&#xff1a; ⏰ 一、延迟消息的核心设计 预设延迟级别&#xff08;非任意时间&#xff09; RocketMQ不支持任意时间延迟&#xff0c;而是预设了18个…

D3 面试题100道之(21-40)

这里是D3的面试题,我们从第 21~40题 开始逐条解答。一共100道,陆续发布中。 🟩 面试题(第 21~40 题) 21. D3 中的数据绑定机制是怎样的? D3 的数据绑定机制通过 selection.data() 方法实现。它将数据数组与 DOM 元素进行一一对应,形成三种状态: Update Selection:已…

PyTorch nn.Parameter理解及初始化方法总结

一、理解 nn.Parameter 本质是什么&#xff1f; nn.Parameter 是 torch.Tensor 的一个子类。这意味着它继承了 Tensor 的所有属性和方法&#xff08;如 .data, .grad, .requires_grad, .shape, .dtype, .device, .backward() 等&#xff09;。它本身不是一个函数或模块&#xf…

【Linux】环境基础和开发工具

Linux 软件包管理器 yum 什么是软件包 在Linux下安装软件, 一个通常的办法是下载程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便…

多模态进化论:GPT-5V图文推理能力在工业质检中的颠覆性应用

前言 前些天发现了一个巨牛的人工智能免费学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 &#x1f680;《多模态进化论&#xff1a;GPT-5V图文推理能力在工业质检中的颠覆性应用》 副标题&#xff1a;2025年实测报告显…

Linux实现一主二从模式

主从复制&#xff1a; 复制概念中分为两类数据库&#xff0c;一类是主数据库&#xff08;master&#xff09;&#xff0c;一类是从数据&#xff08;slave&#xff09;&#xff0c;主 数据库可以进行读写操作&#xff0c;并把写的操作同步给从数据库&#xff0c;一般从数据库是只…

大势智慧亮相第十八届中国智慧城市大会

6月26日-28日&#xff0c;第十八届中国智慧城市大会在武汉盛大举行。本次大会以“数智赋能城市创新协同共治发展蓝图”为主题&#xff0c;汇聚了李德仁、刘经南等八位院士及全国智慧城市领域的专家学者、行业精英&#xff0c;共同探讨行业发展新方向。作为实景三维技术领域领军…

Xbox One 控制器转换为 macOS HID 设备的工作原理分析

Xbox One 控制器转换为 macOS HID 设备的工作原理分析 源代码在 https://github.com/guilhermearaujo/xboxonecontrollerenabler.git 这个工程的核心功能是将 Xbox One 控制器&#xff08;macOS 原生不支持的设备&#xff09;转换为 macOS 可识别的 HID 设备。这里通过分析代…

Notepad++ 复制宏、编辑宏的方法

Notepad具有宏的功能&#xff0c;能够记录当下所有操作&#xff0c;后续只需要一键就可以重复执行&#xff0c;大大减少工作量。 比如我需要把很多文件里面的字符完成替换&#xff0c;那我只需要把替换的过程录制成宏&#xff0c;后续打开文件就可以一键替换了。 但是Notepad的…

Oracle:报错jdbc:oracle:thin:@IP地址:端口:实例名, errorCode 28001, state 99999

报错原因是oracle密码过期&#xff0c;根本解决办法是让密码不再过期&#xff0c;永久有效。具体操作记录一下。 cmd命令行输入&#xff1a; sqlplus / as sysdba修改Oracle密码期限为无限&#xff1a; SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;SQL&…

Apipost 签约中原消费金融:共建企业级 API 全链路协作平台,推动接口管理与测试智能化升级

随着企业数字化转型的不断深化&#xff0c;API 正在从技术细节演变为业务协作的核心枢纽。特别是在金融行业&#xff0c;微服务架构、系统联动、合规要求等多重因素交织下&#xff0c;接口数量激增、管理复杂度提升、质量保障难度加大。近日&#xff0c;Apipost 与中原消费金融…

AntV L7 之LarkMap 地图

一、安装$ npm install -S antv/l7 antv/larkmap # or $ yarn add antv/l7 antv/larkmap二、引入包import type { LarkMapProps, LineLayerProps } from antv/larkmap; import { LarkMap, LineLayer, Marker } from antv/larkmap;三、config配置const layerOptions:Omit<Lin…

客户案例 | 某新能源车企依托Atlassian工具链+龙智定制开发服务,打造符合ASPICE标准的研发管理体系

客户案例 ASPICE标准已成为衡量整车厂及供应商研发能力的重要标尺。某知名车企在其重点项目研发过程中&#xff0c;面临着ASPICE 4.0评估认证的挑战——项目团队缺乏体系经验、流程规范和数字化支撑工具。 为帮助该客户团队顺利通过ASPICE认证并提升研发合规性&#xff0c;At…

stm32的USART使用DMA配置成循环模式时发送和接收有着本质区别

stm32的USART使用DMA配置成循环模式时发送和接收有着本质区别&#xff0c;不要被网上误导了。发送数据时会不停的发送数据&#xff0c;而接收只有有数据时才会接收&#xff0c;没有数据时就会挂起等待。 一、触发机制的差异‌ ‌发送方向&#xff08;TX&#xff09;——状态驱…