我正在尝试根据Databricks 3.5(Spark 2.2.1)中数据帧内的json-string创建数据集。在“ jsonSchema”下面的代码块中,是一个StructType,具有正确的json-string布局,该布局位于数据框的“ body”列中。
val newDF = oldDF.select(from_json($"body".cast("string"), jsonSchema))
这将返回根对象所在的数据框
jsontostructs(CAST(body AS STRING)):struct
后跟架构中的字段(看起来正确)。当我尝试在newDF上进行另一次选择
val transform = newDF.select($"propertyNameInTheParsedJsonObject")
它引发异常
org.apache.spark.sql.AnalysisException: cannot resolve '`columnName`' given
input columns: [jsontostructs(CAST(body AS STRING))];;
显然,我缺少了一些东西。我希望from_json将返回一个可以进一步处理的数据框。
我的最终目标是将oldDF正文列中的json-string转换为数据集。
答案 0 :(得分:1)
EPSecODSStat *pointer_to_struct;
返回一个pointer_to_struct->state = EPSEC_ODS_RUNNING;
或(from_json
)列。这意味着它是一个嵌套对象。如果您提供了有意义的名称:
struct
并且该模式描述了一个简单的array<struct<...>>
,您可以像这样使用standard methods
val newDF = oldDF.select(from_json($"body".cast("string"), jsonSchema) as "parsed")
否则,请按照说明访问数组。