如何在 Spark 中使用 from_json() 数据框?
How do I use a from_json() dataframe in Spark?
我正在尝试从 Databricks 3.5 (Spark 2.2.1) 的数据框中的 json 字符串创建数据集。在下面的代码块中 'jsonSchema' 是一个 StructType,它具有 json 字符串的正确布局,它位于数据框的 'body' 列中。
val newDF = oldDF.select(from_json($"body".cast("string"), jsonSchema))
这return是一个数据框,其中根对象是
jsontostructs(CAST(body AS STRING)):struct
后跟架构中的字段(看起来正确)。当我在 newDF
上尝试另一个 select
val transform = newDF.select($"propertyNameInTheParsedJsonObject")
它抛出异常
org.apache.spark.sql.AnalysisException: cannot resolve '`columnName`' given
input columns: [jsontostructs(CAST(body AS STRING))];;
我显然遗漏了一些东西。我希望 from_json 会 return 一个我可以进一步操作的数据框。
我的终极objective 是将 oldDF 正文列中的 json 字符串转换为数据集。
from_json
returns 一个 struct
或 (array<struct<...>>
) 列。这意味着它是一个嵌套对象。如果您提供了一个有意义的名称:
val newDF = oldDF.select(from_json($"body".cast("string"), jsonSchema) as "parsed")
并且架构描述了一个简单的 struct
你可以使用 比如
newDF.select($"parsed.propertyNameInTheParsedJsonObject")
否则请按照访问数组的说明进行操作。
我正在尝试从 Databricks 3.5 (Spark 2.2.1) 的数据框中的 json 字符串创建数据集。在下面的代码块中 'jsonSchema' 是一个 StructType,它具有 json 字符串的正确布局,它位于数据框的 'body' 列中。
val newDF = oldDF.select(from_json($"body".cast("string"), jsonSchema))
这return是一个数据框,其中根对象是
jsontostructs(CAST(body AS STRING)):struct
后跟架构中的字段(看起来正确)。当我在 newDF
上尝试另一个 selectval transform = newDF.select($"propertyNameInTheParsedJsonObject")
它抛出异常
org.apache.spark.sql.AnalysisException: cannot resolve '`columnName`' given
input columns: [jsontostructs(CAST(body AS STRING))];;
我显然遗漏了一些东西。我希望 from_json 会 return 一个我可以进一步操作的数据框。
我的终极objective 是将 oldDF 正文列中的 json 字符串转换为数据集。
from_json
returns 一个 struct
或 (array<struct<...>>
) 列。这意味着它是一个嵌套对象。如果您提供了一个有意义的名称:
val newDF = oldDF.select(from_json($"body".cast("string"), jsonSchema) as "parsed")
并且架构描述了一个简单的 struct
你可以使用
newDF.select($"parsed.propertyNameInTheParsedJsonObject")
否则请按照访问数组的说明进行操作。