sparklyr-在火花数据框架上调用打印或一瞥是一项昂贵的操作吗?它是如何表现的?

时间:2018-04-03 13:43:57

标签: apache-spark dplyr sparklyr

我试图了解sparklyr中的懒惰评价,并发现了一些我不确定的行为。

我有一个包含100亿行的大表,叫做“记录”,让我们说。

dat <- tbl(sc, 'records') 

当我输入以下命令时,幕后发生了什么:

dat
print (dat) 
glimpse(dat) 

我原以为,因为这些命令中没有一个实际返回有关完整行数的信息,所以有一个聪明的方法只收集十行左右并打印出来。我也希望这也是超快的,并且通常与表的大小无关。

当我在我的大表上实际运行这些命令时,它几乎什么都不做。在稍微监视后端后,似乎火花试图将整个桌子聚集在一起。 当我在较小的桌子上做同样的事情,比方说,只有10 000行。上述命令的结果大约需要一分钟左右。

我发现这种行为令人惊讶 - 是否有一些我遗漏的文件?我是以错误的方式考虑这个问题还是我的设置错误配置?

谢谢,非常感谢任何帮助/指导。

1 个答案:

答案 0 :(得分:0)

  

收集十行(...)我也希望这也是超快的,并且通常与表的大小无关。

这不是合理的期望。在一些非常具体的情况下可能是正确的(对数据没有限制,上游没有广泛的转换,统一的数据分布,分布友好的输入格式,缓存),但在一般情况下,执行时间将高度依赖于整体执行计划。

总体:

  • &#34;广泛转型&#34;像聚合或不同将导致整个数据集的评估,除了限制排序(行数相当少)。
  • 严格限制性选择(filter)将导致在最坏情况下评估所有分区(通常,如果无法从前几个分区收集所需的行数)。
  • 任何不保证正确数据分发的输入格式(如gzip文件或默认JDBC连接器)将评估的数据多于生成输出所需的数据。