Google Dataproc PySpark-BigQuery Connector写入10万行数据极慢问题排查
问题:Spark BigQuery Connector间接写入GCS性能异常缓慢
我尝试通过Spark BigQuery Connector将10万行数据写入BigQuery,每行包含:
- 2个约200-250词的长字符串
- 多个单词语符串
- 少量深度最多为2的字典类型数据
总计35个字段。数据处理过程几乎瞬间完成,但写入BigQuery时耗时长达50分钟。
我的Spark集群配置为5个工作节点,每个节点配备32GB内存、8核CPU和500GB SSD,总计160GB内存、40核CPU。经排查,由于采用间接写入方式,数据会先写入GCS再由BigQuery读取,其中BigQuery读取仅耗时约20秒,说明GCS写入操作占用了近50分钟。这种情况显然不正常,因为我用家用电脑通过pandas执行相同写入操作耗时远低于此。
我的Spark Session初始化代码如下:
spark = SparkSession \ .builder \ .appName('extract-skills') \ .config('spark.jars.packages', 'com.google.cloud.spark:spark-bigquery-with-dependencies_2.12:0.26.0,com.johnsnowlabs.nlp:spark-nlp_2.12:4.1.0') \ .config('spark.executor.memory', '25g') \ .config('spark.executor.cores', '8') \ .config('spark.driver.memory', '12g') \ .config('spark.executor.instances', '5') \ .config("spark.driver.maxResultSize", "0") \ .config("spark.kryoserializer.buffer.max", "2000M")\ .getOrCreate()
写入代码如下:
result. \ write.format('bigquery') \ .mode("overwrite") \ .option("writeMethod", "indirect") \ .option("temporaryGcsBucket","my_bucket") \ .option('table', 'my_project.my_dataset.my_table') \ .save()
我是否遗漏了什么配置?目前无法找到性能瓶颈,且由于需要写入分区表,无法将writeMethod设置为direct。
内容的提问来源于stack exchange,提问作者FairPluto
相关产品推荐
相关产品推荐

