Azure Databricks 将 JSON 数据写入 Parquet 文件引发错误:TypeError:无法推断类型的架构

Posted

技术标签:

【中文标题】Azure Databricks 将 JSON 数据写入 Parquet 文件引发错误:TypeError:无法推断类型的架构【英文标题】:Azure Databricks write JSON Data to Parquet file throws error: TypeError: Can not infer schema for type 【发布时间】:2018-09-23 15:16:25 【问题描述】:

我正在使用 Python 从 WebService 下载 Microsoft Azure Databrics Notebook 中的以下数据:


    "Customers" : 
   [
        
            "CustomID" : "106219-891457",
            "CustomerDateTime" : "0000105910",
            "purchasedItems" : 
            [
                
                  "itemId" : "tBNU5awl2Yac",
                  "state" : "OBSOLETE",
                  "materialNumber" : "0000werqw4603100",
                  "materialName" : "Licasdr",
                  "quantity" : 1,
                  "orderType" : "STANDARD",
                  "Ingredients" : 
                  [
                    
                        "ingredientId" : "146a00dd036__7e06",
                        "ingedrientDesc" : "bla"
                    ,
                    
                        "ingredientId" : "146a234d036__7e06",
                        "ingedrientDesc" : "bla2"
                    
                  ],
                  "lastModificationDate" : "2014-09-30T10:13:46.8Z"
                
            ]
        
    ]

这很好用,我的笔记本中显示的结果如上所示。

我需要将此数据转换/写入 Parquet 文件。我正在尝试使用以下行来做到这一点

conn = httplib.HTTPSConnection('companyhost.com')
conn.request("POST", "/public/api/customers/purchases/findByDate", request, headers)
response = conn.getresponse()
data = response.read()
print(data)
conn.close()

from pyspark.sql.types import *

df = spark.createDataFrame(data)
df.show()

df.write.format('parquet').save(mypath)

但是在排队

df = spark.createDataFrame(数据)

我收到以下错误消息:

TypeError: Can not infer schema for type: type

这里发生了什么?我做错了什么?

【问题讨论】:

看来需要先将response转成json对象 @Ritesh:那该怎么做呢? 由于我不是python背景,所以不能确切地知道库名称。虽然您可以使用一些 json 库将字符串转换为 json 对象。如果这不起作用,请尝试为您的 json 创建自定义架构。也可以通过docs.databricks.com/spark/latest/data-sources/read-json.html链接 【参考方案1】:

要从 json 文件创建数据框,您需要执行以下操作:

df = spark.read.json(data) 

df = spark.read.format('json').load(data)

【讨论】:

以上是关于Azure Databricks 将 JSON 数据写入 Parquet 文件引发错误:TypeError:无法推断类型的架构的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Databricks 上将 Azure Synapse Dataframe 转换为 JSON?

使用 Azure databricks /Synapse notebooks 中的 Json.load 从 Azure datalake 读取 Json 文件作为文件

从 Azure Databricks 将数据写入 Azure Blob 存储

将 DataBricks 连接到 Azure Blob 存储

将 Azure Databricks 增量表迁移到 Azure Synapse SQL 池

Databricks:将数据框合并到 Azure 突触表中