【Pyspark-驯化】一文搞懂Pyspark中对json数据处理使用技巧:get_json_object

ops/2024/9/20 1:20:16/ 标签: json, hadoop, 大数据, 分布式, hdfs, pyspark

【Pyspark-驯化】一文搞懂Pyspark中对json数据处理使用技巧:get_json_object
 
本次修炼方法请往下查看
在这里插入图片描述

🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 相关内容文档获取 微信公众号
🎇 相关内容视频讲解 B站

🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验

🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100%

📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

🌵文章目录🌵

    • 🎯 1.基本介绍
    • 💡 2. 代码用法
      • 2.1 初始化spark环境
      • 2.2 创建包含JSON的DataFrame
      • 2.3 使用get_json_object提取数据
    • 💡 3. 高级用法
      • 3.1 提取多个字段
    • 💡 4. 注意事项
    • 💡 5. 总结

下滑查看解决方法

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  

🎯 1.基本介绍

  在处理存储为JSON格式的列时,我们经常需要从嵌套结构中提取特定字段。PySpark提供了get_json_object函数,它可以从JSON字符串中提取出特定的值。这个函数对于处理具有复杂JSON结构的DataFrame非常有用。

💡 2. 代码用法

2.1 初始化spark环境

  对于pyspark来讲,常用的就是sparkcontext类,一般都是先启动一个这样的程序才可以进行相应的操作,而SparkSession可以在不创建SparkConf,SparkContext或SQLContext的情况下创建SparkSession(它们封装在SparkSession中), 这个sparksession就是用来调取dataframe相关操作的类,具体的操作如下:

    # 一般在进行spark-submit的.py文件在初始化的时候,需要创建spark对象,具体如下from pyspark import SparkConffrom pyspark import SparkContextfrom pyspark.sql import SparkSessionfrom pyspark.sql import SQLContextfrom pyspark.sql import Rowfrom pyspark.sql.types import StructTypefrom pyspark.sql.types import StructFieldfrom pyspark.sql.types import StringTypefrom pyspark.sql import functions as fnfrom pyspark.sql import types as Tsc_conf = SparkConf().setAppName('b2b_fraud_data')spark = SparkSession.builder.config(conf=sc_conf).enableHiveSupport().getOrCreate()
  • 而对于上述的两个class来说,经常对创建相关的临时表,createOrReplaceTempView:创建临时视图,此视图的生命周期与用于创建此数据集的[SparkSession]相关联。
    createGlobalTempView:创建全局临时视图,此时图的生命周期与Spark Application绑定。如果想要删除的话就得使用spark.catalog.dropGlobalTempView(“tempViewName”)

2.2 创建包含JSON的DataFrame

  为了更加方便的了解解析的过程,我们创建相关的json数据格式来进行解析,具体的代码如下所示:

from pyspark.sql import Row# 创建一个包含JSON数据的DataFrame
data = [Row(id=1, features='{"choices":[{"message":{"content":"Hello World"}}]}'),Row(id=2, features='{"choices":[{"message":{"content":"Welcome to PySpark"}}]}')]df = spark.createDataFrame(data)
df.show(truncate=False)
df2 = spark.createDataFrame(data2)+---+------------------------------------------------------+
| id|features                                             |
+---+------------------------------------------------------+
|1  |{"choices":[{"message":{"content":"Hello World"}}]}   |
|2  |{"choices":[{"message":{"content":"Welcome to PySpark"}}]}|

json_object_103">2.3 使用get_json_object提取数据

  使用get_json_object提取features列中的content字段,具体的代码如下所示:

# 使用get_json_object提取features列中的content字段
df_with_content = df.withColumn("content", get_json_object(df.features, "$.choices[0].message.content"))# 显示结果
df_with_content.show(truncate=False)+---+------------------------------------------------------+------------+
| id|features                                             |content     |
+---+------------------------------------------------------+------------+
|1  |{"choices":[{"message":{"content":"Hello World"}}]}   |Hello World |
|2  |{"choices":[{"message":{"content":"Welcome to PySpark"}}]}|Welcome to PySpark|

💡 3. 高级用法

3.1 提取多个字段

  我假设我们需要同时提取多个字段,具体的代码如下所示:

# 假设我们需要同时提取多个字段
df_with_multiple_fields = df.withColumn("content", get_json_object(df.features, "$.choices[0].message.content")) \.withColumn("message_type", get_json_object(df.features, "$.choices[0].message.type"))# 显示结果
df_with_multiple_fields.show(truncate=False)

💡 4. 注意事项

  • get_json_object函数接受两个参数:DataFrame中的列名和JSON路径。
  • JSON路径使用美元符号 开头,后面跟随字段路径,例如 开头,后面跟随字段路径,例如 开头,后面跟随字段路径,例如.choices[0].message.content。
  • 如果JSON数据结构不匹配或路径错误,将返回null。

💡 5. 总结

  get_json_object函数是PySpark中处理嵌套JSON数据的有用工具。通过本博客的代码示例,我们学习了如何使用这个函数从复杂的JSON结构中提取所需的字段。希望这篇博客能够帮助你更好地理解get_json_object的用法,并将其应用于处理JSON数据的任务中。


http://www.ppmy.cn/ops/93790.html

相关文章

使用WebSocket实现一个简易的聊天室

我这里的框架是SpringBoot 首先&#xff0c;我们要有一个前端页面 <!DOCTYPE html> <html xmlns:th"http://www.thymeleaf.org"xmlns:layout"http://www.ultraq.net.nz/web/thymeleaf/layout"layout:decorate"layout"> <head&g…

论文分享|MLLMs中多种模态(图像/视频/音频/语音)的tokenizer梳理

本文旨在对任意模态输入-任意模态输出 (X2X) 的LLM的编解码方式进行简单梳理&#xff0c;同时总结一些代表性工作。 注&#xff1a;图像代表Image&#xff0c;视频代表Video&#xff08;不含声音&#xff09;&#xff0c;音频代表 Audio/Music&#xff0c;语音代表Speech 各种…

eBPF编程指南(一):eBPF初体验

1 什么是EBPF&#xff1f; EBPF是一种可以让程序员在内核态执行自己的程序的机制&#xff0c;但是&#xff0c;为了安全起见&#xff0c;无法像内核模块一样随意调用内核的函数&#xff0c;只能调用一些bpf提前定义好的函数。为了让内核执行程序员自己的代码&#xff0c;需要指…

字符串值提取工具-03-java 调用 groovy

值提取系列 值提取系列 字符串值提取工具-01-概览 字符串值提取工具-02-java 调用 js 字符串值提取工具-03-java 调用 groovy 字符串值提取工具-04-java 调用 java? Janino 编译工具 字符串值提取工具-05-java 调用 shell 字符串值提取工具-06-java 调用 python 字符串…

kali-linux 常用命令大集合(目录、文件查看与编辑,登录、电源、帮助等相关命令详解)

目录 目录查看-ls 帮助命令 帮助命令&#xff1a;whatis 帮助命令&#xff1a;help 帮助命令&#xff1a;man 帮助命令&#xff1a;info 登录命令 登录命令&#xff1a;login 登录命令&#xff1a;last 登录命令&#xff1a;exit 切换用户&#xff1a;su/sudo 命令-…

现在画原型都用什么工具?

现在画原型时&#xff0c;Axure是一款广泛使用的工具&#xff0c;尤其在需要高度交互性和逻辑复杂性的项目中&#xff0c;如企业级应用、大型软件项目等&#xff0c;Axure更是首选。 https://ffhog9.axshare.com https://1zvcwx.axshare.com/start.html 以下是对Axure及其优…

全网最最最详细的haproxy详解!!!

1 什么是负载均衡 负载均衡&#xff08;Load Balancing&#xff09;是一种将网络请求或工作负载分散到多个服务器或计算机资源上的技术&#xff0c;以实现优化资源使用、提高系统吞吐量、增强数据冗余和故障容错能力、以及减少响应时间的目的。在分布式系统、云计算环境、Web服…

[C#]实现GRPC通讯的服务端和客户端实例

最近要做两个软件之间消息的通讯&#xff0c;学习了一下GRPC框架的通讯。根据官方资料做了一个实例。 官方资料请参考&#xff1a;Create a .NET Core gRPC client and server in ASP.NET Core | Microsoft Learn 开发平台&#xff1a;Visual Studio 2022 开发前提条件&#x…

微服务部分面试问题(面试篇)

分布式事务 CAP定理 分布式系统有三个指标&#xff1a; Consistency&#xff08;一致性&#xff09; Availability&#xff08;可用性&#xff09; Partition tolerance &#xff08;分区容错性&#xff09; 它们的第一个字母分别是 C、A、P。Eric Brewer认为任何分布式系…

8.6 MySQL

[rootmysql ~]# sed -i $aexport PATH/usr/local/mysql/bin/:$PATH /etc/profile //加到环境变量 [rootmysql ~]# source /etc/profile //使配置环境生效配置开机自启 [rootmysql ~]# chkconfig --list //列举 注&#xff1a;该输出结果只显…

网络编程----TCP/IP协议

使用TCP/IP协议实现客户端和服务器端进行通信: 1.服务器端(test1.c): #include <sys/socket.h> #include <sys/types.h> #include <arpa/inet.h> #include <stdio.h> #include <unistd.h>// 创建服务器端 int main() {//1.创建套接字int serfd…

计算机毕业设计 校园新闻管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

2024年最新版小程序云开发数据模型的开通步骤,开始开发微信小程序前的准备工作,认真看完奥!

小程序官方又改版了&#xff0c;搞得石头哥不得不紧急的再新出一版&#xff0c;教大家开通最新版的数据模型。官方既然主推数据模型&#xff0c;那我们就先看看看新版的数据模型到底是什么。 一&#xff0c;什么是数据模型 数据模型是什么 数据模型是一个用于组织和管理数据的…

第七节 流编辑器sed(stream editor)(7.2)

三,模式空间中的编辑操作 3,1,地址定界 地址定界示例说明不写地址定界表示对文件所有行进行处理num1,num21,3或者1,$对文件的1-3行进行处理或者1-$(表示文件的最后一行)num1,N1,3对文件的num1行和之后n行进行处理first~step1~2对文件的1,3,5,7,…的行内容进行处理/pattern//^…

RCE安全漏洞 贷齐乐系统Sql注入漏洞

远程代码执行介绍在phpstudy上创建网站在本地数据库中创建数据库--ctf&#xff0c;并创建users表&#xff0c;往表中插入数据 远程代码执行&#xff08;Remote Code Execution&#xff0c;RCE&#xff09;是一种严重的网络安全漏洞&#xff0c;它允许攻击者通过输入恶意代码直…

P3957 [NOIP2017 普及组] 跳房子(青春版代码)

[NOIP2017 普及组] 跳房子 - 洛谷 核心思路 单调队列优化dp 顺序 先让合法答案入队 再删去越界答案 判断非空 后 求 答案 一个答案合法 当且仅当 l < dis < r 记 调了n久&#xff0c;找题解调。 竟发现几乎没有用 STL deque 的。 故写了个青春版题解。 AC 代码…

idea 如何打war包

idea 如何打war包 1.在IntelliJ IDEA中打包WAR文件&#xff0c;你可以按照以下步骤操作:1.设置项目结构:首先&#xff0c;打开IDEA&#xff0c;选择File>Project Structure(或使用快捷键CtrlAltShiftS)。在打开的窗口中&#xff0c;选择 Artifacts 选项 2.添加Web Applicat…

配置MySQL主从,配置MySQL主主 +keeplive高可用

在大数据-Hadoop体系中 配置MySQL主主keeplive高可用 注意&#xff1a;这个是我两年前的word文档&#xff0c;可以当作参考文档有个思路参考一下&#xff0c;但是里面可能有些地方有误 另外&#xff0c;我当年参考了这几位老哥的文档 1&#xff0c;Mysql—主从、主主、主备模…

不依靠for循环,Python如何对列表进行去重并保留排列顺序

在python中&#xff0c;我们想要从列表中删除重复元素&#xff0c;并且保留去重之前的先后排列顺序。在这里&#xff0c;我们本文不谈论for循环&#xff0c;我们来谈论其他的更优方法——OrderedDict和set。 要知道&#xff0c;OrderedDict可以通过保留插入顺序来实现元素去重…

鸿蒙(API 12 Beta3版)【获取支持的编解码能力】 音视频编码

因来源不同、编解码器协议不同以及设备在编解码能力部署上的不同&#xff0c;在不同设备上开发者可用的编解码器及其能力是有差异的。 为确保编解码行为符合预期&#xff0c;开发者应提前通过音视频编解码能力系列接口查询系统支持的音视频编解码器及其关联的能力参数&#xf…