Kinesis Firehose不断将json文件传输到S3存储桶。使用pyspark我需要转换成镶木地板并写入另一个桶。计划每隔30分钟运行一次EMR作业。我使用了以下代码,但是EMR作业运行时间很长(超过4个小时然后我就完成了工作)来转换小文件(大约400K小文件,总大小约为30GB)。 有人可以提供您的意见以提高工作绩效吗?
代码:
# Loop through all folders
for k in sourceBucket.list():
source = k.bucket.name + '/' + k.key
srcsubfolder = source.split('/')
if srcsubfolder[2] != '':
sourcePath = 's3://' + k.bucket.name + '/' + k.key
# derive target path
removefilenamefromkey = k.key.split('/')[:-1]
targetPath = 's3://' + targetBucket.name +'/' + '/'.join(removefilenamefromkey)
#Covert Json into Parquet files
dfjson = spark.read.json(sourcePath)
dfjsoncollower = dfjson.toDF(*[x.lower() for x in dfjson.columns])
dfjsoncollower.write.mode("append").parquet(targetPath)