【问题标题】:How to find out the schema from a tons of messy structured data?如何从大量杂乱的结构化数据中找出模式?
【发布时间】:2019-10-20 18:33:54
【问题描述】:

我有一个庞大的数据集,其中包含杂乱的结构化架构。 比如说,相同的数据字段可以有不同数据类型的数据,例如data.tags可以是字符串列表,也可以是对象列表

我尝试从 hdfs 加载 JSON 数据并打印架构,但出现以下错误。 TypeError: Can not merge type <class 'pyspark.sql.types.ArrayType'> and <class 'pyspark.sql.types.StringType'>

这里是代码

    data_json = sc.textFile(data_path)
    data_dataset = data_json.map(json.loads)
    data_dataset_df = data_dataset.toDF()
    data_dataset_df.printSchema()

是否有可能找出类似的架构

root
 |-- children: array (nullable = true)
 |    |-- element: map (containsNull = true)
 |    |    |-- key: string
 |    |    |-- value: boolean (valueContainsNull = true)
 |    |-- element: string
 |-- first_name: string (nullable = true)
 |-- last_name: string (nullable = true)
 |-- occupation: string (nullable = true)

在这种情况下?

【问题讨论】:

    标签: apache-spark pyspark bigdata


    【解决方案1】:

    如果我理解正确,您正在寻找如何推断 JSON 文件的架构。您应该看看直接将 JSON 读入 DataFrame,而不是通过 Python 映射函数。

    另外,我将您推荐给 How to infer schema of JSON files?,因为我认为它回答了您的问题。

    【讨论】:

    • 谢谢,这个方法可以快速显示schema,但是如何判断哪些数据字段类型错误或丢失?
    • 如果您正在使用 Databricks,请尝试 badRecordsPath。否则,您可以使用PERMISSIVE 模式:spark.read.option("mode", "PERMISSIVE").json("/path/to/user.json") 如果您看到某些列的数据类型错误,您可以通过将值映射到其他内容来过滤掉这些列。
    猜你喜欢
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 2020-05-02
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多