如何使用 Spark SQL 解析 JSON 对象数组

2024-07-04

现在 JSON 数据如下

{"Id":11,"data":[{"package":"com.browser1","activetime":60000},{"package":"com.browser6","activetime":1205000},{"package":"com.browser7","activetime":1205000}]}
{"Id":12,"data":[{"package":"com.browser1","activetime":60000},{"package":"com.browser6","activetime":1205000}]} 
......

这个JSON就是app的激活时间,目的是分析每个app的总激活时间

我使用sparK SQL来解析JSON

scala

val sqlContext = sc.sqlContext
val behavior = sqlContext.read.json("behavior-json.log")
behavior.cache()
behavior.createOrReplaceTempView("behavior")
val appActiveTime = sqlContext.sql ("SELECT data FROM behavior") // SQL query
appActiveTime.show (100100) // print dataFrame
appActiveTime.rdd.foreach(println) // print RDD

但是打印出来的dataFrame是这样的

.

+----------------------------------------------------------------------+

| data|

+----------------------------------------------------------------------+

| [[60000, com.browser1], [12870000, com.browser]]|

| [[60000, com.browser1], [120000, com.browser]]|

| [[60000, com.browser1], [120000, com.browser]]|

| [[60000, com.browser1], [1207000, com.browser]]|

| [[120000, com.browser]]|

| [[60000, com.browser1], [1204000, com.browser5]]|

| [[60000, com.browser1], [12075000, com.browser]]|

| [[60000, com.browser1], [120000, com.browser]]|

| [[60000, com.browser1], [1204000, com.browser]]|

| [[60000, com.browser1], [120000, com.browser]]|

| [[60000, com.browser1], [1201000, com.browser]]|

| [[1200400, com.browser5]]|

| [[60000, com.browser1], [1200400, com.browser]]|

|[[60000, com.browser1], [1205000, com.browser6], [1205000, com.browser7]]|

.

RDD是这样的

.

[WrappedArray ([60000, com.browser1], [60000, com.browser1])]

[WrappedArray ([120000, com.browser])]

[WrappedArray ([60000, com.browser1], [1204000, com.browser5])]

[WrappedArray ([12075000, com.browser], [12075000, com.browser])]

.

我想把数据变成

.

Com.browser1 60000

Com.browser1 60000

Com.browser 12075000

Com.browser 12075000

...

.

我想将RDD中每一行的数组元素变成一行。当然,也可以是其他易于分析的结构。

因为我只学了很多spark和Scala,所以尝试了很长时间都失败了,所以希望大家指导一下。


从你给定的json您可以查看您的数据架构dataframe with printSchema并使用它

appActiveTime.printSchema()
root
 |-- data: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- activetime: long (nullable = true)
 |    |    |-- package: string (nullable = true)

既然你有array你需要explode数据并选择结构字段如下

import org.apache.spark.sql.functions._
appActiveTime.withColumn("data", explode($"data"))
       .select("data.*")
       .show(false)

Output:

+----------+------------+
|activetime|     package|
+----------+------------+
|     60000|com.browser1|
|   1205000|com.browser6|
|   1205000|com.browser7|
|     60000|com.browser1|
|   1205000|com.browser6|
+----------+------------+

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Spark SQL 解析 JSON 对象数组 的相关文章

  • SPARK:如何监控Spark集群的内存消耗?

    很抱歉问了这个基本问题 但我自己无法弄清楚 我试图在 Spark UI 上弄清楚每个工作人员和驱动程序有多少可用内存和使用量 有没有什么简单直接的方法simple如何监控这些信息 我的目标是根据我的数据在工人和司机上的占用量来决定我的持久化
  • Postgres 查询包含某些内容的 JSON 数组

    Postgres 有这种 JSON 数据类型 我想知道如何查询 JSON 数组内的数据 我正在使用 Postgres 9 3 1 我已插入 PUBLISHER 表 该表具有这 2 个字段名称 字符串和数据 json INSERT INTO
  • 是否可以写一个不可变的双向链表?

    我觉得问这个问题有点愚蠢 但我目前正在学习函数式编程并完成了创建单链表的练习 这让我开始思考 是否有可能创建一个不可变的双链表 假设列表 A B 在构造时 A 需要了解 B 但 B 也需要了解 A 我一直在 Scala 中这样做 所以我不确
  • 将 Json 转换为 Map[String, String]

    我有输入 json 像 a x b y c z 我想将此 json 转换为像 Map String String 这样的 Map 所以基本上是键值对的映射 我该如何使用 circe 来做到这一点 请注意 我不知道 Json 中将出现什么键
  • 在线创建文件 JSON 并获取 URL [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想从字符串 JSON 创建一个 URL 来显示该字符串 JSON 你知道有一个网站支持这个吗 您可以
  • 将 JSON 传递给 HTTP POST 请求

    我正在尝试使用以下命令向 google QPX Express API 1 发出 HTTP POST 请求nodejs and request 2 我的代码如下所示 create http request client to consume
  • Scala:如何按元组的第二个元素对元组数组进行排序?

    Scala 有没有办法使用任意比较函数对元组数组进行排序 特别是 我需要按元组的第二个元素对元组进行排序和数组 但我想知道对元组数组进行排序的通用技术 Thanks 在scala 2 8中 有一个方法sortBy 这是一个简单的用例 sca
  • 如何解决“一天内服务调用次数过多:urlfetch”错误?

    我在 Google 表格中收到以下错误 Service invoked too many times for one day urlfetch 我知道事实上我没有进行 100k 次调用 但我的工作表中确实有很多自定义函数 我尝试制作一张新工
  • 如何在pyspark中访问RDD上元组中的单个元素?

    假设我有一个像这样的RDD u Some1 u ABC 9989 u Some2 u XYZ 235 u Some3 u BBB 5379 u Some4 u ABC 5379 我在用map一次获取一个元组 但如何访问元组的单个元素 例如查
  • 为所有支持 copy(id=newId) 方法的案例类创建共同特征

    我正在尝试做类似的事情 trait IdentifiableModel T self def copy id ObjectId T gt val id ObjectId 我发现了一些其他相关的问题试图做类似的事情 但他们并没有真正回答这个问
  • PHP 函数从 Web 服务获取数据

    我怎样才能从中获取数据这个网络服务 http onleague stormrise pt 8031 OnLeagueRest resources onleague Utils Countries使用 PHP 我需要一个简单的 PHP 函数来
  • Akka 2.0 RC2 中远程 Actor 部署出现错误

    我正在尝试创建一个 actor 并将其部署到我的计算机的端口 1997 如下所示 在application conf中 akka version 2 0 RC2 event handlers akka event Logging Defau
  • 在SSIS中使用脚本任务导入Json文件

    我是在 SSIS 中使用脚本任务导入 API 的新手 我必须管理一个简单的 API JSON 文件的导入 但这第二个 API JSON 文件有点棘手 我一直在看代码 只是不知道我做错了什么 我的 JSON 文件有一个标头 我需要确定需要循环
  • 如何使用 type='json' 在 Odoo 控制器中获取 JSON 数据?

    几天前我在这里做了一个类似的问题 如何在 Odoo 控制器中获取 JSON 数据 https stackoverflow com questions 35913866 how to get json data in an odoo cont
  • Windows:Apache Spark 历史服务器配置

    我想使用 Spark 的 History Server 来利用 Web UI 的日志记录机制 但我发现在 Windows 计算机上运行此代码有些困难 我做了以下事情 设置我的 Spark defaults conf 文件以反映 spark
  • 杰克逊没有认识到存在的领域

    这是我的 JSON totalSize 46 done true records Name Wamu I Start Date c 2016 09 26T16 56 10 000 0000 Status c Completed Type c
  • 特别处理Akka流的第一个元素

    有没有一种惯用的方法来处理 Akka 流Source第一个元素以特殊的方式 我现在拥有的是 var firstHandled false source map elem gt if firstHandled handle specially
  • JSON e 和 JSON E

    在 JSON 网站上here http www json org 它解释了 JSON 对象 的不同可能性 然而 在数字部分 这些出现 e e e E E E 1 这些代表什么 在寻找答案的过程中
  • IntelliJ IDEA 10.5 的 Scala 案例类中的部分 EMMA 代码覆盖率

    我正在使用 IntelliJ IDEA 10 5 以及 8 月 14 日更新的 Scala 插件 v0 4 1338 和 Scala 2 9 0 1 我最近开始使用 IDEA 中的 EMMA 测试覆盖率实用程序来生成覆盖率报告 我无法确定为
  • Struts2 JSON 拦截器未填充我的 Action 类

    我正在开发一个 Web 应用程序 其中客户端 JavaScript 库 ExtJS 使用 JSON 请求负载向支持 Struts 的后端发送请求 我的问题是我不知道如何将变量从有效负载获取到我的 Action 类中 我通过使用日志语句知道前

随机推荐

  • 分组依据 - 多个条件 - MySQL

    如何根据条件组合 2 个组 我有一天中每个小时的每个 id 的记录 我想按第一个 id 和当天该 id 的所有记录对信息进行分组 然后按第二个 id 和当天该 id 的所有记录对信息进行分组 我的示例查询是这样的 SELECT r name
  • PHP imap_search 未检测到 gmail 收件箱中的所有邮件

    当我运行一个非常简单的imap search在我的 GMail 收件箱中 搜索返回的邮件数量少于应有的数量 这是任何拥有 GMail 帐户的人都可以运行的脚本 host imap gmail com 993 imap ssl user fo
  • 如何加载测试服务器发送事件?

    我有一个发送服务器发送事件的小应用程序 我想对我的应用程序进行负载测试 这样我就可以对从推送消息到接收消息的延迟进行基准测试 这样我就可以知道性能何时 何处崩溃 有什么工具可以做到这一点 Since Server Sent Events这只
  • VB Clear Scripting.Dictionary 对象

    我正在写一个Excel宏 并且我在清除时遇到问题Scripting Dictionary 对象 Dim test As Integer test CompListDict Count CompListDict RemoveAll Set C
  • UIBarButtonItem 单击后没有反应

    来自rootViewController我导航到UIViewController if self contr nil ExampleViewController controller ExampleViewController alloc
  • 从 FLAC 创建 HLS 音频流

    我有一个包含一首歌曲的 FLAC 文件 我想创建一个 HLS 流 其中质量最好的流是 FLAC 与输入匹配 因此只是传递但分块 然后是 AAC LC 320 160 和 96Kbps 我该怎么做 以下命令是一个很好的起点 ffmpeg i
  • TortoiseGit / Winforms:合并时解析 Resource.resx

    我对 TortoiseGit 还很陌生 想知道如果 resx 文件发生冲突 如何在合并过程中解决它 例如 我可以从菜单中选择 使用他们的 尝试进行拉动和推动 但这是正确的方法吗 我可以以某种方式使用他们的并通过我的项目更改重建它吗 差异 以
  • 如何向 v-dialog、vuetify 添加具有新样式 css 的类?

    再会 我正在使用 vuetify 在组件中使用以下 v dialog
  • 创建一个 TypeScript 记录,其中第二个类型参数依赖于第一个类型参数?

    我试图在 TS 中定义一个映射字符串的对象的类型 我们称之为key 到一个函数 其中参数之一始终是key 我目前拥有的是一个记录stringK 和值的函数 如下所示 const IsCountry Record
  • 我应该担心 JavaScript 支持吗?

    我开发了一个支持ajax 的网站 然而 该网站目前无法在没有 JavaScript 的情况下运行 该网站在我测试过的任何浏览器以及 iPhone 诺基亚手机上都运行良好 但是 我还应该担心 javascript 支持吗 我知道有一些技术可以
  • html5 datalist 仅选择预定义选项

    我正在使用 HTML5datalist允许通过自动完成和过滤功能从大列表中进行选择 但我只想允许从预定义的选项中进行选择 查看小提琴演示http jsfiddle net tharas rrkdu8pk http jsfiddle net
  • 从源代码控制打开现有项目

    我一直在将我的源代码推送到 Mercurial 存储库 今天我需要删除本地副本并重新克隆 我通过简单地将本地副本移动到其他地方 以防万一 并输入 hg clone url 来完成此操作 这部分工作得很好 但是 当我尝试将新克隆的本地副本拉入
  • 将 Three.js 转换为 Adob​​e 3D-pdf?

    有没有办法将 Three hs 作为 U3D 转换为 3D pdf 我想基于树结构 孩子的孩子 将我的程序集导出为 Three js 到 3D pdf 是否可以 与相反的东西将 Adob e 3D pdf 转换为 WebGL https s
  • VSTO 功能区库,看起来像 Word 2010 中的样式选择器

    我正在用 C 编写功能区 COM 加载项 并尝试在新选项卡上创建可用模板文件库 是否可以将图库设置为像 Word ie 中主页选项卡上的样式选择器图库一样打开 显示图库中的所有文件名 MS 不允许其他人使用带内画廊在 Outlook 200
  • 为什么“linkClicked(const QUrl&)”信号没有捕获鼠标左键的 QUrl?

    首先 我想澄清的是 这种奇怪的行为并不适用于每个网站 这是我的代码网页浏览器 https github com EricsonWillians Open Browser def compose tab self index self tab
  • 使用指令刷新窗口时刷新元素高度和大小

    目前 以下指令在页面加载时获取元素的宽度和高度 如何让它在窗口调整大小时刷新它 angular module adsomaApp directive elementSize function timeout return restrict
  • 从子列表中切片元素 - Python

    我想从中返回数字 5 list 1 1 2 3 4 5 6 我以为这会起作用 但事实并非如此 print list 1 1 1 它返回一个空列表 它是索引 1 第二个列表 和位置 1 列表中的第二个数字 这不应该起作用吗 您需要两个单独的操
  • 特别处理Akka流的第一个元素

    有没有一种惯用的方法来处理 Akka 流Source第一个元素以特殊的方式 我现在拥有的是 var firstHandled false source map elem gt if firstHandled handle specially
  • Django - 旋转图像并保存

    我想在 django 中为图像添加 向左旋转 和 向右旋转 按钮 这似乎很容易 但我浪费了一些时间 尝试了在 stackoverflow 上找到的一些解决方案 但还没有结果 我的模型有一个 FileField class MyModel m
  • 如何使用 Spark SQL 解析 JSON 对象数组

    现在 JSON 数据如下 Id 11 data package com browser1 activetime 60000 package com browser6 activetime 1205000 package com browse