当前位置: 首页 > 知识库问答 >
问题:

动态将任意内容转换为json[重复]

乜元魁
2023-03-14

我有一个很大的。tsv文件的结构有些奇怪,它有如下行:

CA  110123140   14228123056896  [{"id":"missing_required_gtin_future_disapproval","location":"gtin","severity":"critical","timestamp":"2017-02-19T20:57:36Z"}, {"id":"missing_required_gtin_error","location":"gtin","severity":"critical","timestamp":"2017-02-19T20:57:36Z"}]]

如您所见,它有4列,但第4列是一个json对象。

我可以将文件加载到火花上的df:

val df = sqlContext.read.format("com.databricks.spark.csv")
.option("delimiter", "\t")
.load(file_path)

但是:

df.take(1)(0)(3)

产量:

res53:  Any = [{"id":"missing_required_gtin_future_disapproval","location":"gtin","severity":"critical","timestamp":"2017-02-19T20:54:43Z"}, {"id":"missing_required_gtin_error","location":"gtin","severity":"critical","timestamp":"2017-02-19T20:54:43Z"}]

这使得(对我来说)很难将其解析为json对象。

理想情况下,我想要的是一个数据帧,其中的列是json对象的键:

"id"    "location"   "severity"          "timestamp"
 123     blabla      critical       2017-02-19T20:54:43Z
 234     blabla      critical       2017-02-19T21:54:43Z

因此,困难是双重的。

  1. 对于原始文件上的每一行,我可能在最终的数据帧上有几行,因为每个json对象都是一个列表。
  2. 如何处理json对象?

编辑:

我意识到我不太清楚自己到底想要什么。我真正想要的是能够访问前三列,以便最终的df如下所示:

"country "   "user"    "object"  "id"    "location"   "severity"          "timestamp"
    CA      98172937   87647563  123     blabla      critical       2017-02-19T20:54:43Z
    CA      98172937   87647563  234     blabla      critical       2017-02-19T21:54:43Z

这是我认为最困难的部分,因为它涉及以某种方式插入json对象前3列的信息。

共有1个答案

慕璞
2023-03-14

您可以将数据读取为rdd,然后将json列转换为这样的数据帧:

 val rdd = sc.textFile("path/filet.tsv").map(_.split('\t')(3))
 val df = sqlContext.read.json(rdd)
 df.printSchema
  root
   |-- id: string (nullable = true)
   |-- location: string (nullable = true)
   |-- severity: string (nullable = true)
   |-- timestamp: string (nullable = true)
 类似资料:
  • 我有文本数据,格式如下所示。如何使用python将其转换为JSON?

  • 问题内容: 我需要知道如何将动态python对象转换为JSON。该对象必须能够具有多个级别的对象子对象。例如: 使用python 2.6的以下代码: 产生以下错误: 我不知道用户可能放入哪种子对象。是否有足够聪明的解决方案来检测属性是否是对象并自动对其进行解析? 更新 为在上包含子对象。 问题答案: 指定参数(doc):

  • 这个问题被问了很多次,但我找不到解决问题的答案。 我试图将嵌套的JSON格式转换为CSV格式如下: JSON结构是任意的,可以是任何东西,嵌套或不嵌套。 我不应该知道它,这是一个数据库答案,我需要将这个JSON答案导出到CSV文件中。 下面是一个例子 输入: 我想要的结果是: 这是一个例子,它可以是任何其他JSON文档。 这里的想法是在CSV列名中使用点表示法。 我已经使用了CDL,但输出不是我想

  • 问题内容: 经过大量搜索和拼凑而成的非常出色的技术,这些技术使用Web上的FOR XML和.nodes()命令来转换结果集,从而能够创建一个合理的查询(而不是存储过程)将任意SQL查询转换为JSON数组的出色工作。 该查询会将每个数据行编码为带有前导逗号的单个JSON对象。数据行用方括号括起来,然后将整个结果集导出到文件中。 我想看看外面是否有人可以看到改善其性能的方法? 这是带有示例表的查询:

  • 问题内容: 我的网站服务正在将DateTime返回到jQuery调用。服务以以下格式返回数据: 如何将其转换为JavaScript友好的日期? 问题答案: 返回的时间是自纪元以来的毫秒数。您可以这样做: 有关如何精确设置日期格式的信息,请参见完整参考。 您可以通过解析整数来去除非数字: 或应用以下正则表达式(来自注释中的Tominator):

  • 问题内容: 我正在尝试使用gson将返回的JSON转换为某种数据结构,以便提取有用的数据。 例如: http://search.twitter.com/search.json?q=test&rpp=1 返回值: 最终,我希望能够输出带有发件人名称和推文日期/时间的推文列表。 我已经阅读了gson文档,但是说实话,这让我头疼不已-我那里有很多新概念。 我是否需要定义一个完全映射到JSON结构的类,以