问题描述
我有一个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 (将#修改为@)