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

如果JSON文件中缺少键,我如何将值提取到数据帧中?

隗轶
2023-03-14

我从每个文件以数字结尾的文件夹中加载JSON文件列表,因此我使用通配符一次加载所有文件。

raw_assignments_2 = spark.read.option("multiline","true").option(schema=schema).json("Assignments_*.json")
[{ "id": 8731,
  "resource_type":"assignment",
  "assignee_id":2478
  "status":"complete"}]

我的文件2只包含三个密钥

[{ "id": 8731,
  "resource_type":"assignment",
  "assignee_id":2478}]

id、resource_type、assignee_id是强制字段,我希望每个状态不是强制的JSON文件都有这些字段。当JSON文件中没有键时,如何将状态提取到dataframe中并分配空值

共有1个答案

黄英韶
2023-03-14

在模式定义中,您可以设置参数nullable=true,然后将加载JSON,并将missing字段设置为NULL。如果您想要一个专用的状态标志,则可以在强制列上筛选nulls。

customschema=StructType([
    StructField("id",DoubleType(), nullable=True),
    StructField("resource_type",StringType(), True),
    StructField("assignee_id",DoubleType(), True),
    StructField("status",StringType(), True)
])

raw_assignments_2 = spark.read.option("multiline","true").schema(customschema).json("data*.json")
raw_assignments_2.show()

raw_assignments_2.withColumn("Issue",f.when(f.col("status").isNull(),True).otherwise(False)).show()


+------+-------------+-----------+--------+
|    id|resource_type|assignee_id|  status|
+------+-------------+-----------+--------+
|8731.0|   assignment|     2478.0|complete|
|8731.0|   assignment|     2478.0|    null|
+------+-------------+-----------+--------+

+------+-------------+-----------+--------+-----+
|    id|resource_type|assignee_id|  status|Issue|
+------+-------------+-----------+--------+-----+
|8731.0|   assignment|     2478.0|complete|false|
|8731.0|   assignment|     2478.0|    null| true|
+------+-------------+-----------+--------+-----+

缺点:它还会标记JSON中存在但值null的条目

 类似资料:
  • 我试图使用下面的代码将一个示例json文件读取到SqlContext中,但失败了,随后出现了datasource错误。 Java语言lang.ClassNotFoundException:未能找到数据源:json。请在以下位置查找包裹http://spark-packages.org位于组织。阿帕奇。火花sql。处决数据源。ResolvedDataSource美元。org上的lookUpdateS

  • 问题内容: 我从如下服务器获取响应字符串 我想获取名字的值。我怎样才能做到这一点?提前致谢。 问题答案: 看到此代码是我在应用程序中使用的代码 我像这样找回

  • 问题内容: 我正在尝试创建一个将条目添加到json文件的函数。最终,我想要一个看起来像 等。这就是我所拥有的: 这确实会创建一个条目,例如。但是,如果我再次使用此函数(使用不同的名称和网址),第一个函数将被覆盖。我需要怎么做才能将第二个(第三个…)条目附加到第一个? 编辑 :对此问题的第一个答案和评论已经指出了我在写块中未使用的明显事实。不过,我看不出该怎么做。例如,以下内容显然不会起作用: 问题

  • 我正在处理一个包含uni_key和createdDate两列的数据帧。我运行一个SQL查询并将结果保存到中,现在我想将这些结果保存到csv文件中。有什么方法可以做到这一点吗?这是一个代码片段: 此代码当前出现以下错误: AttributeError:“DataFrameWriter”对象没有属性“csv”

  • 我在网上读到,您可以使用几种不同的方法将数据帧的内容保存到数据湖中的CSV文件中。我的dataframe很好,但我似乎不能将它保存到CSV文件中。我很乐意把这个CSV放在湖里,或者放在我的桌面上。任何一个都没问题。 尝试1: 尝试2: 两种选择对我都不起作用。对于这两种情况,我将得到一条错误消息,内容为

  • 我正在制作一个前端带有react,后端带有java(带有tomcat服务器的动态web应用程序)的应用程序。我有一些存储在elasticsearch中的数据,我想将其提取到java中,并将其发送到react前端。我不知道该怎么做。任何资源或一些高水平的想法都将不胜感激。 谢啦