使用spark对具有多个列的大Dataframe进行排序,导致超过spark.driver.maxresultsize

m3eecexj  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(342)

运行以下查询时:

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 gb)
我有大约330个列,其中一些相当大(结构数组等),Dataframe总共大约200gb。
我使用的是emr(5.30,spark 2.4.5)集群9 x c5.24xlarge机器,驱动程序为m5.xlarge,默认的emr配置(除了 spark.driver.maxResultSize 我将其增加到13gb,并使用Yarn作为母版)。
我可以看到,通过删除列,它可以在不超过驱动程序内存的情况下工作,但是我想了解除了增加内存之外,是否还有其他解决方案 spark.driver.maxResultSize 为了解决这个问题。我还想了解,司机是以何种方式参与分拣阶段的,是否有办法控制?

eivgtgni

eivgtgni1#

把结果写进hdfs/s3,而不是做一个节目。当您在Dataframe上进行显示时,数据被发送到驱动程序。

相关问题