Pyspark 将拼花地板文件写入谷歌云的时间异常长

Pyspark 将拼花地板文件写入谷歌云的时间异常长,pyspark,Pyspark,我正在dataproc集群上使用pyspark dataframe生成功能,并将拼花文件作为输出写入Google云存储。我面临两个问题- 我已经提供了22个执行器,每个执行器3个内核,每个执行器~13G RAM。然而,当我提交作业时,只有10名执行者被解雇。dataproc集群包含10个工作节点,每个节点8个核心,每个节点30 GB ram 当我编写单个功能文件并记录总时间时,它明显低于将所有功能写入单个文件所需的时间。我尝试过改变分区,但也没有帮助 以下是我编写拼花地板文件的方式: df.se

我正在dataproc集群上使用pyspark dataframe生成功能,并将拼花文件作为输出写入Google云存储。我面临两个问题-

  • 我已经提供了22个执行器,每个执行器3个内核,每个执行器~13G RAM。然而,当我提交作业时,只有10名执行者被解雇。dataproc集群包含10个工作节点,每个节点8个核心,每个节点30 GB ram

  • 当我编写单个功能文件并记录总时间时,它明显低于将所有功能写入单个文件所需的时间。我尝试过改变分区,但也没有帮助

  • 以下是我编写拼花地板文件的方式:

    df.select([feature_lst]).write.parquet(gcs_path+outfile,mode='overwrite')
    
    数据大小-20M+记录,30+数字特征

    Spark UI图像:

    当前阶段是我将所有的特性写在一起的阶段——比之前所有阶段的总和都要高得多


    如果有人能就上述两个问题提供任何见解,我将不胜感激。

    看起来像一个非常小的数据集。。。你为什么用spark来做这个?您可以尝试将
    spark.sql.shuffle.partitions
    降低到8左右,并通过stages选项卡(最小值,25%,中等值,75%,最大值)@thePurplePython-这是生成的输出大小。原始数据包含60多列,主要是字符串。在列对上执行复杂的计算,如haversine距离、编辑距离、子字符串匹配等。在大熊猫身上,这就像永远。无论如何,我计划在未来使用>100万行。我在代码开始时使用重新分区到500。如果没有这一点,我看不到任何并行计算的发生。添加了“sqlContext.sql(“SET spark.sql.autoBroadcastJoinThreshold=-1”)”到脚本,现在就可以工作了。有趣的。。。我一直在使用广播,没有必要明确关闭它。。。您是否正在缓存任何对象?这可能会导致执行器ram填满并溢出到磁盘,从而导致GC/挂起任务无法缓存任何内容。最后只有一个写操作。其他一切都是懒惰的柱状变换。