将 json 对象文件保存为 json 数组而不是 s3 上的 json 对象

Posted

技术标签:

【中文标题】将 json 对象文件保存为 json 数组而不是 s3 上的 json 对象【英文标题】:Save json objects file as json array instead of json objects on s3 【发布时间】:2019-04-23 09:23:53 【问题描述】:

我正在尝试将 DF 保存为 s3 上的 json 格式。它被保存为 json 对象文件,但是我想要 json 数组文件。

I have csv file on s3, which i am loading into dataframe in aws glue. after performing some transformation i am writing DF to S3 format as json. But it is creating json objects file like: 

obj1 obj2 但是我想将它保存为 json 数组文件,如: [obj1,obj2]

datasource0 = glueContext.create_dynamic_frame.from_options(connection_type="s3",connection_options = "paths": [s3_path],"useS3ListImplementation":True,"recurse":True, format="csv", format_options= "withHeader":True,"separator":"|")

applymapping1 = ApplyMapping.apply(frame = datasource0, mappings = [("cdw_zip_id", "string", "cdw_zip_id", "string"), ("zip_code", "string", "zip_code", "string"), ("cdw_terr_id", "string", "cdw_terr_id", "string")], transformation_ctx = "applymapping1")

applymapping2 = applymapping1.toDF() applymapping2.coalesce(1).write.format("org.apache.spark.sql.json").mode("overwrite").save(args['DEST_PATH'])

实际是: obj1 obj2 预期是: [obj1,obj2]

【问题讨论】:

【参考方案1】:

当调用 df.write 操作时,Spark 会进行惰性评估,即所有转换都应用于单个读取操作中从所有分区中读取的所有记录,同时跨所有节点(其中存在分区)配置为执行工作负载。

由于所有任务都独立写入输出,我们可以预期只有个别记录写入目标,而不是整个 json 文件。

如果您执行合并操作,您将只能合并分区数据,而不是 spark 写入操作的行为。

【讨论】:

以上是关于将 json 对象文件保存为 json 数组而不是 s3 上的 json 对象的主要内容,如果未能解决你的问题,请参考以下文章

PHP json_encode将行作为对象而不是数组返回[重复]

jQuery Ajax 调用返回 JSON 字符串而不是对象数组

php json_encde 转换空对象和空数组 为json格式 而不是[]

Python:将 JSON 对象转换为 JSON 数组

将逗号分隔的 JSON 转换为换行符分隔的节点

将 JSON 对象保存到 Node 中的文件中 [重复]