【问题标题】:Pyspark Schema for Json fileJson 文件的 Pyspark 模式
【发布时间】:2017-11-19 00:16:00
【问题描述】:

我正在尝试将复杂的 json 文件读入 spark 数据框。 Spark 可以识别模式,但会将字段错误地视为字符串,而该字符串恰好是一个空数组。 (不知道为什么它必须是数组类型时是字符串类型) 以下是我期待的样本

arrayfield:[{"name":"somename"},{"address" : "someadress"}]

目前数据如下

arrayfield:[]

这对我的代码的影响是,当我尝试查询 arrayfield.name 时,它​​会失败。我知道我可以在读取文件时输入模式,但由于 json 结构非常复杂,因此从头开始编写它并没有真正奏效。我尝试使用 df.schema(显示在 StructType 中)获取架构并根据我的要求对其进行修改,但是如何将字符串传回 StructType ?这可能真的很愚蠢,但我发现很难解决这个问题。是否有任何工具/实用程序可以帮助我生成 strutType

【问题讨论】:

    标签: json apache-spark pyspark apache-spark-sql


    【解决方案1】:

    您需要将 StructType 对象传递给 DF 构造函数。

    假设你的 DF 在执行后出现错误

    df.schema
    

    像这样打印输出:

    StructType(List(StructField(data1,StringType,true),StructField(data2,StringType,true)))
    

    所以,你需要把这个字符串翻译成可执行脚本。

    1. 为类型添加导入

      from pyspark.sql.types import *
      
    2. 将列表和括号更改为python的括号

      List() -> []
      
    3. 在每个类型声明后添加括号

      StringType -> StringType()
      
    4. 修复布尔值字符串

      true -> True
      
    5. 赋值给变量

      schema = StructType([
              StructField("data1", StringType(),True),
              StructField("data2", StringType(),True)])
      
    6. 创建新的 DF 对象

      spark.read.csv(path, schema=schema)
      

    你已经完成了。

    【讨论】:

      猜你喜欢
      • 2021-12-11
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      • 2018-05-21
      相关资源
      最近更新 更多