如何在Scala中将AWS G胶动态框架的字符串列中的JSON数组开箱

问题描述

我有一个AWS Catalog数据库表,其中某些列是JSON Blob。

这些最初是作为DynamicFrame中的字符串作为 sem

大多数列包含一个json对象,而 some 包含一个json对象数组。

现在,我已经成功地将unbox函数用于包含json对象的列,并且可以清楚地看到,它在新DynamicFrame中生成一个结构,而对于包含数组的列,则导致了一个不包含任何内容的空结构。

我用以下代码创建了一个glue Dev和Jupyter笔记本:

import com.amazonaws.services.glue.ChoiceOption
import com.amazonaws.services.glue.glueContext
import com.amazonaws.services.glue.MappingSpec
import com.amazonaws.services.glue.ResolveSpec
import com.amazonaws.services.glue.errors.CallSite
import com.amazonaws.services.glue.util.glueArgParser
import com.amazonaws.services.glue.util.Job
import com.amazonaws.services.glue.util.Jsonoptions
import com.amazonaws.services.glue.DynamicFrame
import org.apache.spark.SparkContext
import scala.collection.JavaConverters._

val spark = SparkContext.getorCreate()
val glueContext = new glueContext(spark)

val families = Seq(
    (1,"Rossi","""[{"name":"mario"},{"name":"lucia"}]"""),(2,"Bianchi","""[{"name":"luigi"},{"name":"ciro"}]""")
).toDF("id","family_name","members")

val familiesFrame = DynamicFrame(families,glueContext)

familiesFrame.printSchema()
familiesFrame.show()

val unBoxed = familiesFrame.unBox("members","json")
unBoxed.printSchema()
unBoxed.show()

结果是:

frame: com.amazonaws.services.glue.DynamicFrame = com.amazonaws.services.glue.DynamicFrame@52820569
root
|-- id: int
|-- family_name: string
|-- members: string

{"id": 1,"family_name": "Rossi","members": "[{\"name\":\"mario\"},{\"name\":\"lucia\"}]"}


unBoxed: com.amazonaws.services.glue.DynamicFrame = com.amazonaws.services.glue.DynamicFrame@499342c6
root
|-- id: int
|-- family_name: string
|-- members: struct
{"id": 1,"family_name": "Rossi"}

最终的结构实际上应该是具有name属性的对象数组

我在做什么错?如何使DynamicFrame取消将json作为数组拆箱?

预先感谢, 吉奥

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)