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

news2024/11/15 21:29:16

【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 SparkConf
    from pyspark import SparkContext
    from pyspark.sql import SparkSession
    from pyspark.sql import SQLContext
    from pyspark.sql import Row
    from pyspark.sql.types import StructType
    from pyspark.sql.types import StructField
    from pyspark.sql.types import StringType
    from pyspark.sql import functions as fn
    from pyspark.sql import types as T
    sc_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"}}]}|

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.coloradmin.cn/o/2033946.html

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

相关文章

stm32入门学习13-时钟RTC

(一)时钟RTC stm32内部集成了一个秒计数器RTC,用于显示我们日常的时间,如日期年月日,时分秒等,RTC的主要原理就是进行每秒自增,如果我们知道开始记秒的开始时间,就可以计算现在的日…

Redis操作--RedisTemplate(二)StringRedisTemplate

一、介绍 1、简介 由于存储在 Redis 中的 key 和 value 通常是很常见的 String 类型,Redis模块提供了 RedisConnection 和 RedisTemplate 的扩展,分是 StringRedisConnection 和 StringRedisTemplate,作为字符串操作的解决方案。 通过源码…

JVM二:JVM类加载机制

目录 前言 1.什么是类加载? 2.类加载整体流程 3.一个类什么时候被加载? 4.双亲委派模型 4.1 JVM默认提供了三个类加载器 4.1.1 BootstrapClassLoader 4.1.2 ExtensionClassLoader 4.1.3 ApplicationClassLoader 4.2 破坏双亲委派模型 前言 在上一篇文章中&#xf…

江科大/江协科技 STM32学习笔记P21

文章目录 ADC模数转换器ADC简介逐次逼近型ADCSTM32的ADCADC基本结构输入通道转换模式单次转换,非扫描模式连续转换,非扫描模式单次转换,扫描模式连续转换,扫描模式 触发控制数据对齐转换时间校准硬件电路电位器产生可调电压的电路…

Python图像背景去除

目录 🎁库的导入 🎀库的安装 🎁rembg库去除背景 🎁效果 🎁文末彩蛋 今天来介绍一个特别有趣的python库,rembg库,全称是“Remove Background”的缩写,意为“去除背景”&#xff…

边缘计算与物联网实训室解决方案

一、引言 随着物联网(IoT)技术的迅猛发展,数据量呈爆炸性增长,对数据处理和实时响应能力提出了更高要求。传统的云计算模式由于数据传输延迟和带宽占用等问题,难以满足物联网场景中对低延迟和高可靠性的需求。边缘计算…

QT判断操作系统类型和CPU架构

一、判断操作系统类型 1.在.pro文件中判断 macx { # mac only } unix:!macx{ # linux only } win32 { # windows only }2.在代码中判断 可以包含QGlobal头文件&#xff0c;判断预定义宏 #include <QtGlobal> ... #ifdef Q_OS_MAC // mac #endif#ifdef Q_OS_LINUX // …

Datawhale X 魔搭 AI夏令营 Task1 从零入门AI生图原理实践笔记

赛题内容 参赛者需在可图Kolors模型的基础上训练LoRA模型&#xff0c;生成无限风格&#xff0c;如水墨画风格、水彩风格、赛博朋克风格、日漫风格… 基于LoRA模型生成8张图片组成连贯故事&#xff0c;故事内容可自定义&#xff1b;基于8图故事&#xff0c;评估LoRA风格的美感度…

企业大模型落地从0到0.1

现在人工智能里的“大明星”——大模型&#xff0c;正在悄悄改变各行各业。这就像给企业装上了一颗聪明的大脑&#xff0c;能帮助解决各种棘手问题&#xff0c;提升工作效率。今天&#xff0c;我们就来分析下企业如何一步一步让这个“大脑”在自家地盘里真正派上用场&#xff0…

LVS 实现四层负载均衡项目实战--DR模式

一、环境准备 主机名IP地址router eth0&#xff1a;172.25.254.100 eth1&#xff1a;192.168.0.100 clienteth0&#xff1a;172.25.254.200lvseth1&#xff1a;192.168.0.50web1web2 1、client配置 [rootclient ~]# cat /etc/NetworkManager/system-connections/eth0.nmconne…

ArrayList 动态扩容

目录 一、 构造函数1、有参构造函数2、无参构造函数 二、数组扩容三、总结 一、 构造函数 1、有参构造函数 1.1如果指定了容量大小&#xff0c;创建该大小的数组 1.2如果没有指定大小&#xff0c;默认创建空数组 1.3如果是指定小于0的大小&#xff0c;抛出异常 2、无参构造…

前端工程化15-邂逅ES6的语法规范

4、ES6邂逅 3.1、什么是ECMA ECMA&#xff08;European Computer Manufacturers Association&#xff09;中文名为欧洲计算机制造商协会&#xff0c;这个组织的目标是评估、开发和认可电信和计算机标准。1 994年后该组织改名为Ecma国际。 3.2、什么是ECMAScript ECMAScript…

怎样找回U盘里误删的文件?试试这些方法!

在日常工作和生活中&#xff0c;我们经常会使用U盘来存储和传输重要的文件。然而&#xff0c;由于操作失误或其他原因&#xff0c;我们有时会误删U盘中的文件。当遇到这种情况时&#xff0c;很多人可能会感到焦虑和无助。不过&#xff0c;幸运的是&#xff0c;有几种方法可以帮…

三十六、【人工智能】【机器学习】【监督学习】- Bagging算法模型

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

【清空大脑】

清空大脑&#xff0c;就是把大脑里的想法&#xff0c;都写下来&#xff0c;放到一个地方。这样&#xff0c;可以降低大脑的压力。 我记得我第一次清空大脑的时候&#xff0c;使用的事微软OutLook的便签功能&#xff0c;一共记录了200多项。 看着这200多项&#xff0c;我感觉自…

ubuntu设置开机自动执行脚本、ubuntu设置开机自动启动java服务

使用 crontab 编辑器添加一个任务&#xff0c;该任务将在系统启动时执行你的脚本。在终端中运行以下命令&#xff1a; crontab -e添加开机自启任务&#xff1a; 在打开的编辑器中&#xff0c;添加以下行&#xff1a; reboot /home/demo.jar &这行代码告诉 cron 在每次系统…

微调神器LLaMA-Factory官方保姆级教程来了,从环境搭建到模型训练评估全覆盖

1. 项目背景 开源大模型如LLaMA&#xff0c;Qwen&#xff0c;Baichuan等主要都是使用通用数据进行训练而来&#xff0c;其对于不同下游的使用场景和垂直领域的效果有待进一步提升&#xff0c;衍生出了微调训练相关的需求&#xff0c;包含预训练&#xff08;pt&#xff09;&…

探索AI角色扮演的新前端工具:SillyTavern

在人工智能&#xff08;AI&#xff09;领域&#xff0c;角色扮演&#xff08;Roleplay&#xff09;无疑是一个富有趣味且充满潜力的应用场景。无论你是AI爱好者还是开发者&#xff0c;找到一个合适的前端工具来访问并与语言模型进行互动是至关重要的。今天&#xff0c;我们将介…

[2024_08_12日志]ONNX Runtime的使用

问题&#xff1a;Segmentation 错误。在 C API 上使用自定义 onnx 模型运行。模型在 Python 上按预期工作&#xff0c;但在 C API 上运行相同的模型时&#xff0c;会收到一个分段错误 python的模型代码如下&#xff1a; class Facenet(nn.Module):def __init__(self, backbone…

lvs详解及实例配置

目录 1.什么是负载均衡 1.1为什么用负载均衡 1.2.负载均衡类型 1.2.1.四层负载均衡 1.2.2.七层负载均衡 1.3 四层和七层的区别 2.LVS介绍 2.1LVS 的优势与不足 2.2LVS 核心组件和专业术语 3.ipvsadm命令 4.LVS集群中的增删改 4.1.管理集群服务中的增删改 4.2.管理集…