如何在Spark中使用from_json()数据框?

时间:2018-10-23 09:22:01

标签: scala apache-spark databricks

我正在尝试根据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转换为数据集。

1 个答案:

答案 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")

否则,请按照说明访问数组。