运行以下查询时:
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中。当你在数据帧上表演时,数据会被发送到驱动程序。