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

在 Pyspark 2.4 中使用结构类型验证列的架构

华瀚漠
2023-03-14

我有一个数据帧,其中有一列是JSON字符串

from pyspark.sql import SparkSession
from pyspark.sql.types import *
import pyspark.sql.functions as F

sc = SparkSession.builder.getOrCreate()

l = [
    (1, """{"key1": true, "nested_key": {"mylist": ["foo", "bar"], "mybool": true}})"""),
    (2, """{"key1": true, "nested_key": {"mylist": "", "mybool": true}})"""),
    ]
df = sc.createDataFrame(l, ["id", "json_str"])

并且希望使用模式解析< code>from_json的< code>json_str列


schema = StructType([
    StructField("key1", BooleanType(), False),
    StructField("nested_key", StructType([
        StructField("mylist", ArrayType(StringType()), False),
        StructField("mybool", BooleanType(), False)
     ]))
])

df = df.withColumn("data", F.from_json(F.col("json_str"), schema))
df.show(truncate=False)
+---+--------------------------+
|id |data                      |
+---+--------------------------+
|1  |[true, [[foo, bar], true]]|
|2  |[true, [, true]]          |
+---+--------------------------+

正如人们所看到的,第二行不符合架构中的架构,因此即使我在StructField中将False传递到可以为空,它也是空的。对于我的管道来说,如果存在不符合所定义架构的数据,则会以某种方式引发警报,但我不确定在Pyspark中执行此操作的最佳方法。真正的数据有很多很多的键,其中一些是嵌套的,所以用某种形式的isNan检查每个键是不可行的,因为我们已经定义了模式,所以感觉应该利用它。

如果重要的话,我不必检查整个数据帧的模式,我实际上是在检查StructType列的模式之后

共有1个答案

慕容晔
2023-03-14

查看选项参数:https://spark.apache.org/docs/2.3.1/api/python/pyspark.sql.html?highlight=from_json#pyspark.sql.functions.from_json

虽然有点含糊,但是它允许你在这里传递一个< code>dict到底层方法:https://spark . Apache . org/docs/2 . 3 . 1/API/python/py spark . SQL . html?highlight = from _ JSON # py spark . SQL . data frame reader . JSON

您可能成功地传递了类似<code>选项={‘mode’:‘FAILFAST}

 类似资料:
  • 问题内容: 我找不到解决方案,发现更多人陷入同一问题,因此我将其发布在这里。 默认情况下,JAX-WS服务器(至少用于WebLogic)将不验证通过其关联架构接收到的消息。 由于任何无效值(错误的xsd:dateTime格式,数字字段中的字母等)都将导致Java对象(包括必填字段)中的 空 值,从而导致很多问题。 我需要做的是由服务器提供的简单验证。 由于某些原因,当我尝试使用提供的架构验证时,出

  • 第一次尝试GraphQL,我希望一种模式类型能够访问另一种模式类型中的对象数组。在连接到MongoDB之前,我使用本地数据和lodash对此进行测试。关于我的尝试,我得到了一些错误。我知道我很接近了。任何援助将不胜感激。 以下是我的最新尝试。我使用 express-graphql 访问了 GraphQLList,并使用 GraphQLID 访问了第二个模式。 schema.js 其目的是在Grap

  • 问题内容: 我需要验证结构值是否正确,这意味着我需要单独检查每个字段,这对于少量的小型结构来说很容易,但是我想知道是否有更好的方法。这就是我现在的做法。 这是验证结构中字段值的惯用方式吗?看起来很麻烦。 问题答案: 我认为没有其他方法可以快速完成此操作。但是我找到了一个可以帮助您的go软件包:https : //github.com/go- validator/validator README文件

  • 我有一个endpoint,其响应如下: 状态的可能值如下:活动、非活动、已删除。要检查架构,我尝试了以下操作: 为了验证,我使用以下句子:然后匹配 但它不起作用。这就是错误所在 实际值:“活动”,应为:[“已删除”、“活动”、“非活动”],原因:实际值与列表中的值不同 你能帮帮我吗?

  • 我正在使用rest-assured并使用它验证JSON模式。我使用jsonschema生成了模式。net(草稿7),并将生成的模式保存在文件中,并根据GETAPI的响应匹配生成的模式。但抛出错误的代码输出如下: 我的通用模式是模式链接 api API repsonse的响应

  • 我对XML非常陌生,我面临着验证问题,如果我的XML和XSD文件结构良好,我也希望得到一些反馈。 在根据XSD验证XML时,我经常遇到错误- 下面的XML XSD 如果你发现其中任何一个有任何错误,请随时指出。它们都有从图案到最大长度的限制。 谢谢!!!!