使用spark对具有多列的大DataFrame进行排序,会导致超过spark.driver.maxResultSize



运行以下查询时:

spark.read.parquet("hdfs:///mydataframe").orderBy('a, 'b, 'timestamp).show(100, false)

我的spark作业失败了,除了以下例外:

org.apache.spark.SparkException:由于阶段失败,作业中止:705个任务的序列化结果的总大小(13.0 GB(大于spark.driver.maxResultSize(13.0 G(

我有大约330列,其中一些列相当大(结构数组等(,DataFrame总共大约200GB。

我使用的是EMR(5.30,Spark 2.4.5(集群,由9台c5.24xlarge机器组成,驱动程序为m5.xlarge,默认EMR配置(除了我增加到13gb的spark.driver.maxResultSize,并使用yarn作为主机(。

我可以看到,通过删除列,它可以在不超过驱动程序内存的情况下工作,但我想知道除了增加spark.driver.maxResultSize之外,是否还有其他解决方案可以解决这个问题。我还想了解,司机以何种方式参与分拣阶段,是否有办法控制这一点?

不要做表演,而是将结果写到HDFS/S3中。当你在数据帧上表演时,数据会被发送到驱动程序。

最新更新