pyspark - PySpark Schema 应以 DDL 格式指定为字符串文字或 schema_of_json 函数的输出,而不是 schemaofjson(`col1`);
问题描述
我正在尝试使用 schema_of_json 函数从类似 json 的字符串中推断出架构,然后使用该架构将该字符串值格式化为使用 from_json 函数的结构。我的代码是
import pyspark.sql.functions as sqlf
dfTemp = readFromEventHubs()
df= dfTemp.withColumn("col1", sqlf.get_json_object(col("jsonString"), '$.*'))
col1Val= df.col1
jsonSchema = sqlf.schema_of_json(col1Val)
df.select(sqlf.from_json(df.col1, jsonSchema).alias("jsonCol"))
但我有以下例外
AnalysisException: 'Schema should be specified in DDL format as a string literal or output of the schema_of_json function instead of schemaofjson(`col1Val`);'
只是一个精度,我正在使用火花流。
我的代码有什么问题,谢谢
解决方案
schema_of_json
需要一个表示有效 JSON 对象的字符串。您正在传递它 a pyspark.sql.Column
,可能是因为您希望它会推断出每一行的模式。不过那不会发生。
from_json
期望 Column 作为其第一个位置参数,该参数包含 JSON 字符串,并作为其第二个参数pyspark.sql.types.StructType
,或者pyspark.sql.types.ArrayType
甚至(从 2.3 开始)一个 DDL 格式的字符串或一个 JSON 格式的字符串(这是一个规范)。
这意味着您不能每行推断出不同的模式。
如果您在阅读之前知道架构(很有可能您确实知道),那么在您调用from_json
. 如果您没有固定在 Databricks Delta 上,则可以使用不同的 DataFrameReader: spark.read.json
,不指定其关键字参数schema
,以便推断架构。
推荐阅读
- node.js - 我面临一个错误:错误 [ERR_HTTP_HEADERS_SENT]: 将标头发送到客户端后无法设置标头,请帮帮我
- assembly - 为什么这个汇编代码会无限循环?
- sql - 交叉应用为空时如何返回行
- python - 使用其他类的默认初始值
- c# - C#中同一语句中的多个异步调用
- android - 测试溢出菜单中的项目是否存在/不存在
- python - 一维数据中的锐步检测
- go - 如何使用 GORM 重用对象变量?
- transform - 无法使用 useBeamSchema 将 Pcollection 自动转换为表行模式
- django - 在模型中保留访问特定 url 的用户列表