PySpark写jdbc需要很长时间

时间:2018-02-12 17:51:46

标签: python jdbc pyspark

我使用Pyspark从S3读取文件,从protobuf格式反编译,并将其写入Redshift表。一切都运行得很快,但写入Redshift所需的时间非常慢。 DataFrame大约有五十万行和100列。我遵循了提示hereherehere,但仍然运行速度极慢。这是我的代码:

rdd = sc.sequenceFile("s3a://bucket_name/file_path").values()

    def f(x):
      feed = proto_pb2.message()
      feed.ParseFromString(bytes(x))
      row_dict = {descriptor.name: getattr(feed, descriptor.name) for descriptor in feed.DESCRIPTOR.fields}
      return row_dict

 df = rdd.map(lambda x: Row(**f(x))).toDF()

 df = df.coalesce(1)

 df.write.format('jdbc').options(url='jdbc:redshift://redshift_url:5439/dev?rewriteBatchedStatements=true', 
                                    dbtable=table_stage, 
                                    user=user, 
                                    password=passwd, 
                                    batchsize=20000).mode('append').save()

我测试过从我的python解释器只上传了5行数据,需要整整8秒!

    >>> import time
    >>> start = time.time()
    >>> df_1.write.format('jdbc').options(url='jdbc:redshift://redshift_url:5439/dev?rewriteBatchedStatements=true', 
                             dbtable=table_stage, 
                             user=user, 
                             password=passwd, 
                             batchsize=20000).mode('append').save()
    >>> end = time.time()
    >>> print(end - start)
    8.918693780899048

必须设置一些我错过的错误信息。求救!

0 个答案:

没有答案