- 120
- 0
1.现在有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
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查询
appActiveTime.show(100,100) // 打印dataFrame
appActiveTime.rdd.foreach(println) // 打印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的初学者,所以试了好久都不成功,所以希望大家能指导我一下.
- 共 0 条
- 全部回答
-
队友最骚 普通会员 1楼
在Spark SQL中,我们可以使用JSON functions来解析嵌套的对象数组。以下是一个示例:
sql SELECT column1, column2, JSON_EXTRACT(json_column, '$[*]') as nested_json FROM table_name在这个例子中,
json_column是一个包含嵌套对象数组的列。JSON_EXTRACT函数被用来提取每个对象数组的元素。'$[*]'是一个特殊的字符串,表示我们想要提取的是所有数组的元素,而不是数组的最后一个元素。这个字符串也可以被替换为['*']来提取所有的元素。注意,这个查询假设你的JSON数据是以键值对的形式存储的,每个键都是一个数组。如果你的JSON数据是以其他形式存储的,你可能需要使用不同的函数来解析它。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
