使用 Spark 按行和列扩展 JSON 字符串

2023-11-22

我是 Spark 新手,正在使用 JSON,但我在做一些相当简单的事情时遇到了困难(我认为)。我尝试过使用类似问题的部分解决方案,但不太正确。我目前有一个 Spark 数据框,其中有几列代表变量。每行都是变量值的唯一组合。然后,我有一个应用于每一行的 UDF,它将每一列作为输入,进行一些分析,并以 JSON 字符串的形式输出每行的汇总表,并将这些结果保存在表的新列中。一些小样本数据如下所示:

+------+-----+------+-------------------------------------------------------------------
|Var 1 |Var 2|Var 3 |JSON Table 
+------+------------+-------------------------------------------------------------------
|True  |10%  |200   |[{"Out_1": "Mean", "Out_2": "25"}, {"Out_1": "Median", "Out_2": "21"}]
|False |15%  |150   |[{"Out_1": "Mean", "Out_2": "19"}, {"Out_1": "Median", "Out_2": "18"}]
|True  |12%  |100   |[{"Out_1": "Mean", "Out_2": "22"}, {"Out_1": "Median", "Out_2": "20"}]

我想将其转换为以下格式:

+------+-----+------+------+-----+
|Var 1 |Var 2|Var 3 |Out_1 |Out_2| 
+------+------------+------+-----+
|True  |10%  |200   |Mean  |25   |
|True  |10%  |200   |Median|21   |
|False |15%  |150   |Mean  |19   |
|False |15%  |150   |Median|18   |
|True  |12%  |100   |Mean  |22   |
|True  |12%  |100   |Median|20   |

实际上,有更多的变量、数百万行和更大的 JSON 字符串以及更多的输出,但核心问题仍然相同。我基本上尝试获取 JSON 模式并使用 from_json ,如下所示:

from pyspark.sql.functions import *
from pyspark.sql.types import *

schema = spark.read.json(df.rdd.map(lambda row: row["JSON Table"])).schema

df = df\
     .withColumn("JSON Table", from_json("JSON Table", schema))\
     .select(col('*'), col('JSON Table.*'))\

df.show()

这似乎正确地获取了 JSON 结构(尽管每个值都被读取为字符串,但大多数都是整数),但生成的数据帧是空的,尽管具有正确的列标题。关于如何处理这个问题有什么建议吗?


假设你的JSON table列是一个json string。您可以明确设置您的schema, explode(from_json)进而select你的专栏。

df.show() #sample dataframe
+-----+-----+-----+----------------------------------------------------------------------+
|Var 1|Var 2|Var 3|JSON Table                                                            |
+-----+-----+-----+----------------------------------------------------------------------+
|true |10%  |200  |[{"Out_1": "Mean", "Out_2": "25"}, {"Out_1": "Median", "Out_2": "21"}]|
|false|15%  |150  |[{"Out_1": "Mean", "Out_2": "19"}, {"Out_1": "Median", "Out_2": "18"}]|
|true |12%  |100  |[{"Out_1": "Mean", "Out_2": "22"}, {"Out_1": "Median", "Out_2": "20"}]|
+-----+-----+-----+----------------------------------------------------------------------+

#sample schema     
#root
 #|-- Var 1: boolean (nullable = true)
 #|-- Var 2: string (nullable = true)
 #|-- Var 3: long (nullable = true)
 #|-- JSON Table: string (nullable = true)


from pyspark.sql import functions as F
from pyspark.sql.types import *

schema = ArrayType(MapType(StringType(),StringType()))

df.withColumn("JSON Table", F.explode(F.from_json("JSON Table", schema)))\
  .select("Var 1","Var 2","Var 3","JSON Table.Out_1","JSON Table.Out_2").show()

+-----+-----+-----+------+-----+
|Var 1|Var 2|Var 3| Out_1|Out_2|
+-----+-----+-----+------+-----+
| true|  10%|  200|  Mean|   25|
| true|  10%|  200|Median|   21|
|false|  15%|  150|  Mean|   19|
|false|  15%|  150|Median|   18|
| true|  12%|  100|  Mean|   22|
| true|  12%|  100|Median|   20|
+-----+-----+-----+------+-----+
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Spark 按行和列扩展 JSON 字符串 的相关文章

  • 使用 pyspark awsglue 时显示 DataFrame

    如何使用 awsglue 的 job etl 显示 DataFrame 我尝试了下面的代码 但没有显示任何内容 df show code datasource0 glueContext create dynamic frame from c
  • Elasticsearch GET API 获取分片大小

    在 Elasticsearch 2 3 3 中 有没有办法使用返回 JSON 的 GET API 获取分片大小 目前我找到了以下几种获取shard size的方法 这两种方法都存在问题 recovery gt 使用 JSON 进行响应并提供
  • Node.js - 异步 JSON 查询

    如果这是一个愚蠢的问题 我深表歉意 但我对 Javascript 很陌生 而 Node js 确实让我很头疼 因为它是异步的 我的目标是从 API 查询 JSON 对象并能够使用它 我试图寻找关于我应该做什么的问题和答案 但它们对我来说都没
  • Google 地图查询返回的 JSON 包含像 \x26 这样的编码字符(如何解码?)

    在 Java 应用程序中 我获取 JSON 来自 Google 地图 其中包含以下字符 x26我想将其转换为其原始字符 据我所知 这是一个 UTF 8 表示法 但我不完全确定 在源 JSON 中 可能会出现各种编码字符 例如 x3c div
  • 将 JSON 反序列化为自定义列表

    我有这个 json var x 99 abc 2dp GroupNum 0 Total 4 1 7 x date 60 x 1dp GroupNum 1 存在以下规则 让i参考内部列表索引 x i 0 必填项 始终为整数 x i 1 必填项
  • 如何按单个整数字段对 JSON 进行排序? [复制]

    这个问题在这里已经有答案了 我有以下 JSON title title order 0 order 9 order 2 JSON 包含很多字段 我如何根据字段对它们进行排序order field 我一直在寻找 Nodejs 中内置的东西 但
  • json、rails、javascript 中的解析错误

    我需要将 ruby 数组放入 javascript 数组中 但出现解析错误 var characters 这就是我将 ruby 嵌入到内联 javascript 中的方式 但它出现了解析错误 我应该如何将此 ruby 数组放入 javasc
  • AWS Lambda 函数误解了 python 中的事件字典?

    我正在尝试将谷歌日历 API 部署到 AWS Lambda 由于我在从事件字典中提取值时遇到问题 由 lambda 从 POST 请求的 JSON 负载创建 因此我创建了一个玩具函数来测试 def handler event context
  • 在哪里可以访问 Gdx.files.local()?

    我有一个预制的 json 文件 我想测试一下 这个 Json 文件将被修改 所以我想读 写 我注意到内部是只读的 所以我想将我的 Json 文件保存在本地存储中 通过 eclipse 或操作系统 windows 8 手动 以便我可以通过 f
  • 如何通过 Json 在 C# 上使用 telegram API?

    我正在查看 telegram API 函数列表 https core telegram org method auth checkPhone https core telegram org method auth checkPhone 并想
  • 如何动态删除嵌套的json键?

    这是示例 json search facets author language value nep count 3 value urd count 1 source value West Bengal State Council of Vo
  • json.net自定义jobject反序列化

    我正在尝试使用 JsonConvert DeserializeObject string 将字符串反序列化为可与动态一起使用的 jobject 来动态访问 json 文档 但是我想避免知道文档的大小写 以便我可以输入 dynamic doc
  • Twitch API - 无法使用 PHP 获取身份验证令牌

    stackoverflow 的成员们大家好 我不是一个喜欢寻求帮助的人 但在这种情况下 我认为这是解决我的问题的唯一方法 谷歌并没有给我太大帮助 所以 我的问题 我想使用 Twitch API 获取一些数据 听起来很容易 我希望是这样 下面
  • 使用 lift-json 反序列化具有 Map[String,Any] 属性的案例类

    几天来我一直在努力解决一些通过 lift json 应该很简单的事情 将映射序列化为 JSON 我知道 我知道 根对象还不能是 List 或 Map 但我愿意暂时包装在一个案例类中 但我仍然无法让它工作 感谢一些堆栈溢出帮助 我已经可以进行
  • PHP,JSON 解码中的无效字符

    我在让 json decode 处理我收到的特定字符串时遇到问题 我已将其范围缩小到这一行 systemNotes 6 2013 年 1 月 9 日 12 52 PM 测试名称 帐单地址 2 已更改为送货姓名 送货姓氏 电子邮件地址 送货地
  • 如何使用多个 { 'not find' } 来干燥方法?

    我正在尝试优雅地处理以下错误的 JSON 其中Hash fetch似乎不是一个选择 使用 Hash fetch 优雅地处理错误的 JSON https stackoverflow com questions 25193627 handle
  • PHP json_encode 反斜杠和数组名称的问题

    我正在将一些 postgresql 数据转换为 PHP json encode 但我遇到了一些问题 json encode 将 BackSlash 添加到我的数据中的所有斜杠中 在描述中出现段落标记的结束 我认为是因为反斜杠问题 我不希望我
  • F#:如何将 Json.NET [JsonConstructor] 属性应用于主构造函数?

    我正在尝试用 F 做一些事情 比如JsonConstructorAttribute中的示例Json NET 文档 http www newtonsoft com json help html JsonConstructorAttribute
  • 如何在 PySpark 中使用 foreach 或 foreachBatch 写入数据库?

    我想使用 Python PySpark 从 Kafka 源到 MariaDB 进行 Spark 结构化流处理 Spark 2 4 x 我想使用流式 Spark 数据帧 而不是静态数据帧或 Pandas 数据帧 看来必须要用foreach o
  • 尝试从 Spark 连接到 Oracle

    我正在尝试将 Oracle 连接到 Spark 并希望从某些表和 SQL 查询中提取数据 但我无法连接到 Oracle 我尝试过不同的解决方案 但没有看到 我已按照以下步骤操作 如果我需要进行任何更改 请纠正我 我使用的是 Windows

随机推荐

  • Jenkins 无法启动硒测试(等待创建配置文件超时)

    Jenkins 无法启动 Selenium 测试 ubuntu 错误 11 26 24 652 信息 启动 org openqa jetty jetty Server ab50cd 11 26 24 738 信息 正在准备 Firefox
  • Google 趋势配额限制

    我试图从 Google 趋势中提取数据 仅尝试了 2 次就收到 您已达到每日限制 错误 有什么办法可以解决这个问题吗 我知道 Google API 项目有特殊的配额限制 但 Google Trends 没有 API 我还读到我们可能需要向它
  • 查找 >2 个文件中的共同元素

    我有三个文件 如下所示 文件1 txt aba 0 0 aba 0 0 1 abc 0 1 abd 1 1 xxx 0 0 文件2 txt xyz 0 0 aba 0 0 0 0 aba 0 0 0 1 xxx 0 0 abc 1 1 文件
  • Composer install -n --ignore-platform-reqs 不忽略 PHP 扩展

    我们有运行的循环构建composer install n ignore platform reqs no dev但这不再忽视平台要求 这是我在圈子日志中看到的 这 ignore platform reqs显然不起作用 有什么想法吗 Your
  • Jersey:“找不到语法元素”是什么意思?

    将 Jersey 从版本 1 15 升级到 1 17 后 它开始记录以下消息 Apr 2 2013 5 13 06 PM com sun jersey server wadl generators AbstractWadlGenerator
  • Django Rest Framework 请求对AllowAny 设置进行身份验证

    我创建了一个JWT 授权应用程序的后端 登录 注销 令牌检索和刷新都工作正常 符合预期 今天早上我添加了一个注册视图 它抛出了通常的情况 detail Authentication credentials were not provided
  • 在Java中获取当前年份的整数值

    我需要将 Java 中的当前年份确定为整数 我可以用java util Date 但它已被弃用 对于 Java 8 及以上版本 int year Year now getValue 对于旧版本的 Java int year Calendar
  • 如何获取从 ButtonGroup 中选择哪个 JRadioButton

    我有一个 Swing 应用程序 其中包含表单上的单选按钮 我有ButtonGroup 但是 查看可用的方法 我似乎无法获取所选的名称JRadioButton 到目前为止 我可以说的是 从 ButtonGroup 中 我可以执行getSele
  • android:字符串格式指定粗体

    我有一个字符串定义在string xml like
  • 为什么我们要在汇编中使用 CPU 寄存器,而不是直接使用内存呢?

    我有一个关于装配的基本问题 如果算术运算也可以在内存上运行 为什么我们还要费心只在寄存器上进行算术运算呢 例如 以下两个原因 本质上 导致计算出相同的值作为答案 片段1 data var dd 00000400h code Start ad
  • Android 音频 - 流式正弦音发生器奇怪的行为

    第一次在这里发布海报 我通常喜欢自己找到答案 无论是通过研究还是反复试验 但我在这里遇到了困难 我正在尝试做的事情 我正在构建一个简单的 Android 音频合成器 现在 我只是实时播放正弦音 用户界面中的滑块会随着用户的调整而改变音调的频
  • window.requestFileSystem() 函数的简单示例

    我有下一个问题 我尝试使用window requestFileSystem Chrome 中可以使用 但失败 看看我的步骤 1 I added allow file access from file flag to Chrome see i
  • 如何使用批处理脚本 ping 多个服务器并返回 IP 地址和主机名?

    所以我必须使用仅批量为了这 基本上 服务器主机名都列在 txt 文件中 我使用以下代码对所有服务器执行 ping 操作并将其结果显示在 txt 文件中 For f i in testservers txt do ping n 1 i gt
  • 我无法使用 knit 生成 \label{fig:mwe-plot}

    我在生成时遇到问题 label 对于使用 knitr 进行绘图时 Rmd文件到一个 md文件通过knitr 然后转换为 pdf via pandoc 我的 MWE Rmd包括如下 r Setup include FALSE results
  • 在 WebBrowser 控件中显示来自流的 PDF

    如何显示 PDF 文档MemoryStream在一个WebBrowser控制 我四处搜索 发现我可以使用以下命令简单地导航到 PDF 文件 webBrowser1 Navigate C Temp ExportedPDF pdf 不过 我想避
  • 将.jar文件导入Scala环境

    即使读完后 Scala jar 文件的问题 我还是有点迷茫 我正在尝试将一些包导入到我的 Scala 文件中 即使添加到类路径后解释器也无法识别它们 一个例子 我有进口声明 import org json4s 我从这里下载了 jar htt
  • Flask 会话忘记请求之间的条目

    我正在使用最新的 Flask Werkzeug Flask 0 9 客户端会话来保存请求之间的信息 会话未设置为持久 因为我可以在浏览器关闭时删除 cookie 我的问题如下 我使用一些服务器端代码来用条目填充 Flask 会话变量 之后
  • 什么是谓词委托以及应该在哪里使用它?

    你能给我解释一下吗 什么是谓词委托 我们应该在哪里使用谓词 使用谓词时有哪些最佳实践 描述性源代码将不胜感激 谓词是一个返回的函数true or false 谓词委托是对谓词的引用 所以基本上谓词委托是对返回的函数的引用true or fa
  • 捆绑来自 Xamarin 的预构建 Realm 文件

    我看过一些 SO 帖子 详细介绍了如何将预构建的 Realm 文件与 iOS Obj c swift 和 Android Java 捆绑在一起 但我找不到任何有关从 PCL 或共享项目中与 Xamarin 捆绑的信息 这可能吗 我相信 由于
  • 使用 Spark 按行和列扩展 JSON 字符串

    我是 Spark 新手 正在使用 JSON 但我在做一些相当简单的事情时遇到了困难 我认为 我尝试过使用类似问题的部分解决方案 但不太正确 我目前有一个 Spark 数据框 其中有几列代表变量 每行都是变量值的唯一组合 然后 我有一个应用于