在Spark中调用dataframe.collect时,异常数量的数据被拉入驱动程序

时间:2018-11-20 02:04:03

标签: apache-spark apache-spark-sql

在我的火花代码中,我正在从数据帧中收集驱动程序上的一个小对象。我在控制台上看到以下错误消息。我正在程序中调用dataframe.take(1)

Total size of serialized results of 13 tasks (1827.6 MB) is bigger than spark.driver.maxResultSize (1024.0 MB)

这知道可以通过设置spark.driver.maxResultSize参数来解决。但是我的问题是,当我正在收集的对象的大小小于MB时,为什么会有这么多的数据被拉入驱动程序。是否首先将所有对象序列化并拉入驱动程序,然后驱动程序选择其中一个(take(1))作为输出。

1 个答案:

答案 0 :(得分:-2)

从上述问题来看,您似乎希望从数据框中获取1行,可以使用下面的代码来实现。

df.take(1)

但是,在这种情况下,当您执行df.take(1).collect()时,收集将应用于take(1)的结果,该结果是scala或python中的另一个集合(取决于您使用的语言。)

还有,为什么要执行take(1)上的收集?

此致

Neeraj