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

如何读取Spark中的多嵌套JSON数据[duplicate]

江俊能
2023-03-14

我需要将该模式格式提取到如下所示的治疗区域行项目:

trialTherapeuticAreas_ID,trialTherapeuticAreas_name,trialDiseases_id,trialDiseases_name,trialPatientSegments_id,trialPatientSegments_name

共有1个答案

商飞翮
2023-03-14

您需要以嵌套方式爆炸数组并在单独的列中选择结构元素为此,您需要爆炸内置函数和选择api和混淆现象。

要尝试的代码:

import org.apache.spark.sql.functions._
val finalDF = df.withColumn("trialTherapeuticAreas", explode(col("trialTherapeuticAreas")))
                                      .select(col("trialTherapeuticAreas.id").as("trialTherapeuticAreas_ID"), col("trialTherapeuticAreas.name").as("trialTherapeuticAreas_name"), explode(col("trialTherapeuticAreas.trialDiseases")).as("trialDiseases"))
                                      .select(col("trialTherapeuticAreas_ID"), col("trialTherapeuticAreas_name"), col("trialDiseases.id").as("trialDiseases_id"), col("trialDiseases.name").as("trialDiseases_name"), explode(col("trialDiseases.trialPatientSegments")).as("trialPatientSegments"))
                                      .select(col("trialTherapeuticAreas_ID"), col("trialTherapeuticAreas_name"), col("trialDiseases_id"), col("trialDiseases_name"), col("trialPatientSegments.id").as("trialPatientSegments_id"), col("trialPatientSegments.name").as("trialPatientSegments_name"))

你应该满足你的要求

您也可以使用三个< code>withColumn api和一个< code>select语句来完成上述转换。

import org.apache.spark.sql.functions._
val finalDF = df.withColumn("trialTherapeuticAreas", explode(col("trialTherapeuticAreas")))
                .withColumn("trialDiseases", explode(col("trialTherapeuticAreas.trialDiseases")))
                .withColumn("trialPatientSegments", explode(col("trialDiseases.trialPatientSegments")))
                .select(col("trialTherapeuticAreas.id").as("trialTherapeuticAreas_ID"), col("trialTherapeuticAreas.name").as("trialTherapeuticAreas_name"), col("trialDiseases.id").as("trialDiseases_id"), col("trialDiseases.name").as("trialDiseases_name"), col("trialPatientSegments.id").as("trialPatientSegments_id"), col("trialPatientSegments.name").as("trialPatientSegments_name"))

对于大型数据集,不建议连续使用 withColumn,因为它可能会给出随机输出。原因是与Column是分布式的,并且未证明以串行方式遵循执行顺序

 类似资料:
  • 我这里有一个很长的json:https://textup.fr/601885q4我想读一个“支付令牌合同”中的数据,特别是那些带有“id”的数据:1我的问题是,我不知道如何称呼特定的词汇,因为它们都有相同的名称。这是否可能,我还不习惯操作如此复杂的对象,因为我是初学者。我会尝试像:[“订单][x][“id”:1][“基本价格”]这样的东西,x是一个for循环,循环遍历每个“订单”显示。但是我无法将

  • 问题内容: 我正在尝试从数据JSON获取值。我已经成功遍历了JSON数据,几乎满足了我的需求! 在Python中运行以下命令: 给我这个: 我只想获得价值。这是关键。 如何进一步执行命令以仅返回值? 问题答案: 这是完整的输出吗?这本字典包含带有嵌套字典的列表,因此您应该这样处理。假设它被称为: 您的第一个地址是对象,然后是字典中的键,列表中的索引以及该字典的键: 输出: 编辑:根据您所得到的然后

  • 问题内容: 我有以下JSON,如下所示。我正在尝试读取值TOP1,TOP2。我不太确定该如何做。 我正在使用以下..但这只是给我一个对象,该对象具有用于TOP1和TOP2的嵌套对象。如何获取值TOP1和TOP2? 和下面的数据 问题答案: 您似乎想通过循环,因此请更改以下内容: 对此: 现在,您正在使用该对象遍历该对象数组, 这些 对象就是具有属性的对象,例如:和。

  • 我的json结构如下: 表示JSON继续使用更多。我想从这个JSON中检索。我的代码如下所示: 但是,使用此代码,将始终 我尝试了不同的路径,但总是得到一个空的

  • 问题内容: 假设我有json数据,例如 现在我正在从该json数据访问字段,例如: 如何以最有效的方式从给定的json数据访问第三个字段()? 不起作用 一种可能是我使用for循环构造字符串,然后进行eval评估,但是有没有有效的方法呢? 问题答案: 老实说,我无法理解您的问题。JSON已经结构化了,为什么需要更改结构? 在您的情况下,我将按以下方式访问它: 如果碰巧希望 遍历 数据,则需要: 更

  • 本文向大家介绍asp.net提取多层嵌套json数据的方法,包括了asp.net提取多层嵌套json数据的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了asp.net提取多层嵌套json数据的方法。分享给大家供大家参考,具体如下: 在.net 2.0中提取这样的json: 引用命名空间: 可以把上面的JSON看成一个对象.你只要写对应的类即可 然后在解析的地方这样写: 得到City的