【问题标题】:Why Spark outputs nullable = true, when schema inference left to Spark, in case of JSON?为什么在 JSON 的情况下,当模式推断留给 Spark 时,Spark 输出 nullable = true?
【发布时间】:2020-08-09 01:34:51
【问题描述】:

为什么 Spark 显示 nullable = true,但未指定模式并将其推断留给 Spark?

// shows nullable = true for fields which are present in all JSON records.
spark.read.json("s3://s3path").printSchema() 

通过类JsonInferSchema,可以看到对于StructType,显式可空设置为true。但我无法理解其背后的原因。

PS:我的目标是推断大型 JSON 数据集(Schema Inference for Massive JSON Datasets。一个主要部分是我想知道哪些字段是可选的,哪些是强制性的(w.r.t 数据集)。

【问题讨论】:

    标签: json dataframe apache-spark jsonschema


    【解决方案1】:

    因为它可能会为模式推断做一个数据样本,由于检查范围和样本大小的限制,它不能 100% 推断是否为 null 或不为 null。因此设置为 null 更安全。就这么简单。

    【讨论】:

    • 您能否详细说明一下。默认情况下,sampleRatio 为 1.0:github.com/apache/spark/blob/… 不确定 1.0 是否意味着完整的数据或完整的分区。
    • 但是你可以覆盖它
    • 对不起,我有点困惑。默认值为 1.0,我不会覆盖它。因此,如果它检查所有记录的架构(假设 1.0 意味着完整的数据),那么它是否应该能够确定地判断一个字段是否可以为空?
    • 正如你所说,从代码来看,它就是它所设置的。因为当您不进行 100% 的推理扫描时,将其设置为可为空会更安全。然后他们决定,由于大多数人不会 100% 采样,因此设置应始终如此。
    猜你喜欢
    • 2018-06-29
    • 2014-09-29
    • 2021-10-29
    • 2022-01-13
    • 2021-04-30
    • 2015-05-08
    • 2018-04-26
    • 2021-10-28
    • 2017-01-16
    相关资源
    最近更新 更多