首页 > 解决方案 > 将 json 对象文件保存为 json 数组而不是 s3 上的 json 对象

问题描述

我正在尝试将 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,"分隔符":"|"})

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}]

标签: jsonamazon-web-servicesamazon-s3apache-spark-sqlaws-glue

解决方案


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

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

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


推荐阅读