我把这个json放在一个bucket上,这个bucket是用一个分类器爬网的,这个分类器用这个json分类器将数组拆分成记录 $[*]
.
我注意到json在一行上—语法没有问题—但这会导致创建的表有一个类型为array的列,其中包含一个包含我需要的实际字段的结构。
在雅典娜,我无法访问数据,glue也无法读取array.field中的列;因此,我手动更改了表的结构,使其成为一个结构类型,其中包含其他字段。我可以在athena上进行查询,并让glue向导将单个列识别为结构的一部分。
当我创建作业并相应地Map字段时(这是自动生成的,请注意 array.field
符号 applymapping1 = ApplyMapping.apply(frame = datasource0, mappings = [("array.col1", "long", "col1", "long"), ("array.col2", "string", "col2", "string"), ("array.col3", "string", "col3", "string")], transformation_ctx = "applymapping1")
)我在一个s3 bucket的表上测试输出。作业不会失败,但会在bucket中创建空文件!
我尝试过的另一件事是修改源json并添加返回行:
在此之前:
[{"col1":322,"col2":299,"col3":1613552400000,"col4":"TEST","col5":"TEST"},{"col1":2,"col2":0,"col3":1613552400000,"col4":"TEST","col5":"TEST"}]
这是在:
[
{"col1":322,"col2":299,"col3":1613552400000,"col4":"TEST","col5":"TEST"},
{"col1":2,"col2":0,"col3":1613552400000,"col4":"TEST","col5":"TEST"}
]
如前所述修改文件可以让我正确地读写数据;这让我相信问题在于一开始的json不好。在要求更改json之前,我是否可以在我的glue job(spark2.4,python3)中实现一些东西来处理一行json?我到处找了,但什么也没找到。
最终的目标是将数据加载到redshift中,我们正在从s3到s3检查为什么没有读取数据。
提前感谢您的时间和考虑。
暂无答案!
目前还没有任何答案,快来回答吧!