在S3中将流json文件转换为镶木地板格式

时间:2017-12-12 06:15:03

标签: pyspark parquet

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)

0 个答案:

没有答案