spark 访问前 n 行 - take vs limit
spark access first n rows - take vs limit
我想访问 spark 数据帧的前 100 行并将结果写回 CSV 文件。
为什么take(100)
基本上是即时的,而
df.limit(100)
.repartition(1)
.write
.mode(SaveMode.Overwrite)
.option("header", true)
.option("delimiter", ";")
.csv("myPath")
需要永远。
我不想获取每个分区的前 100 条记录,而只想获取任何 100 条记录。
为什么 take()
比 limit()
快这么多?
这是因为 Spark 目前不支持谓词下推,请参阅 。
实际上,take(n) 也应该花费很长时间。然而,我刚刚对其进行了测试,并得到了与您相同的结果 - 无论数据库大小如何,take 几乎是瞬时的,而 limit 需要很多时间。
虽然还是有人回答,但我想分享一下我学到的东西。
myDataFrame.take(10)
-> 生成行数组。
这是一个操作并执行收集数据(就像收集一样)。
myDataFrame.limit(10)
-> 产生一个新的 Dataframe。
这是一个转换,不执行收集数据。
我没有解释为什么 limit 需要更长的时间,但这可能已经在上面得到了回答。这只是对 take 和 limit 之间区别的基本回答。
.take()
可能是答案,但我使用了如下所示的简单 head 命令
df.head(3)
.take()
对我不起作用。
可以使用take(n)来限制数据。在屏幕截图中添加带有输出的完整代码。
Limit() 不会在分区中起作用,因此需要更多的时间来执行
我想访问 spark 数据帧的前 100 行并将结果写回 CSV 文件。
为什么take(100)
基本上是即时的,而
df.limit(100)
.repartition(1)
.write
.mode(SaveMode.Overwrite)
.option("header", true)
.option("delimiter", ";")
.csv("myPath")
需要永远。 我不想获取每个分区的前 100 条记录,而只想获取任何 100 条记录。
为什么 take()
比 limit()
快这么多?
这是因为 Spark 目前不支持谓词下推,请参阅
实际上,take(n) 也应该花费很长时间。然而,我刚刚对其进行了测试,并得到了与您相同的结果 - 无论数据库大小如何,take 几乎是瞬时的,而 limit 需要很多时间。
虽然还是有人回答,但我想分享一下我学到的东西。
myDataFrame.take(10)
-> 生成行数组。 这是一个操作并执行收集数据(就像收集一样)。
myDataFrame.limit(10)
-> 产生一个新的 Dataframe。 这是一个转换,不执行收集数据。
我没有解释为什么 limit 需要更长的时间,但这可能已经在上面得到了回答。这只是对 take 和 limit 之间区别的基本回答。
.take()
可能是答案,但我使用了如下所示的简单 head 命令
df.head(3)
.take()
对我不起作用。
可以使用take(n)来限制数据。在屏幕截图中添加带有输出的完整代码。
Limit() 不会在分区中起作用,因此需要更多的时间来执行