我试图了解sparklyr
中的懒惰评价,并发现了一些我不确定的行为。
我有一个包含100亿行的大表,叫做“记录”,让我们说。
dat <- tbl(sc, 'records')
当我输入以下命令时,幕后发生了什么:
dat
print (dat)
glimpse(dat)
我原以为,因为这些命令中没有一个实际返回有关完整行数的信息,所以有一个聪明的方法只收集十行左右并打印出来。我也希望这也是超快的,并且通常与表的大小无关。
当我在我的大表上实际运行这些命令时,它几乎什么都不做。在稍微监视后端后,似乎火花试图将整个桌子聚集在一起。 当我在较小的桌子上做同样的事情,比方说,只有10 000行。上述命令的结果大约需要一分钟左右。
我发现这种行为令人惊讶 - 是否有一些我遗漏的文件?我是以错误的方式考虑这个问题还是我的设置错误配置?
谢谢,非常感谢任何帮助/指导。
答案 0 :(得分:0)
收集十行(...)我也希望这也是超快的,并且通常与表的大小无关。
这不是合理的期望。在一些非常具体的情况下可能是正确的(对数据没有限制,上游没有广泛的转换,统一的数据分布,分布友好的输入格式,缓存),但在一般情况下,执行时间将高度依赖于整体执行计划。
总体:
filter
)将导致在最坏情况下评估所有分区(通常,如果无法从前几个分区收集所需的行数)。