как написать json обратно на s3 в aws клей? - PullRequest
0 голосов
/ 08 апреля 2020

Я новичок в aws -клейке. Я пытаюсь прочитать CSV и преобразование в объект json. Как я видел, подход заключается в том, чтобы читать csv через сканер и конвертировать в Pyspark DF, а затем конвертировать в json объект. До сих пор я конвертировал в json объект. Теперь мне нужно написать эти json обратно в корзину s3?

Ниже приведен код

#########################################
### IMPORT LIBRARIES AND SET VARIABLES
#########################################

#Import python modules
from datetime import datetime

#Import pyspark modules
from pyspark.context import SparkContext
import pyspark.sql.functions as f

#Import glue modules
from awsglue.utils import getResolvedOptions
from awsglue.context import GlueContext
from awsglue.dynamicframe import DynamicFrame
from awsglue.job import Job
import json
import boto3

#Initialize contexts and session
spark_context = SparkContext.getOrCreate()
glue_context = GlueContext(spark_context)
session = glue_context.spark_session
s3_source = boto3.resource('s3')

#Parameters
glue_db = "umesh-db"
glue_tbl = "read"

#########################################
### EXTRACT (READ DATA)
#########################################
#Read movie data to Glue dynamic frame
dynamic_frame_read = glue_context.create_dynamic_frame.from_catalog(database = glue_db, table_name = glue_tbl)

#Convert dynamic frame to data frame to use standard pyspark functions
data_frame = dynamic_frame_read.toDF()

## Show DF data
print("Showing Df data")
data_frame.show()

### Convert the DF to the json
jsonContent = data_frame.toJSON()
jsonValue={}
arrraYObj=[]
for row in jsonContent.collect():
    print("Row data ", row)
    arrraYObj.append(row)
print("Array Obj",arrraYObj)
jsonValue['Employee']=arrraYObj
print("Json object ", jsonValue)

#Log end time
#dt_end = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
#print("Start time:", dt_end)

Оцените, если кто-нибудь может помочь обеспечить правильный подход? Спасибо

1 Ответ

0 голосов
/ 08 апреля 2020
data_frame.write.format(‘json’).save(‘s3://bucket/key’)

Или напрямую из Dynami c Frame

glue_context.write_dynamic_frame.from_options(frame = dynamic_frame_read,
          connection_type = "s3",
          connection_options = {"path": "s3://bucket/key"},
          format = "json")

...