限制(n)与展(n)性能差异Pyspark

0

的问题

试图更深入地了解如何火工作,并玩弄pyspark cli(2.4.0). 我一直在寻找之间的差异使用 limit(n).show()show(n). 我最终得到两个非常不同执行时间为两个非常相似的查询。 以下是在命令我跑了。 木文件中引用的代码如下具有约50列,而是超过50gb在大上的远程HDFS。

# Create dataframe
>>> df = sqlContext.read.parquet('hdfs://hdfs.host/path/to.parquet') ↵

# Create test1 dataframe
>>> test1 = df.select('test_col') ↵
>>> test1.schema ↵
StructType(List(StructField(test_col,ArrayType(LongType,true),true)))
>>> test1.explain() ↵
== Physical Plan ==
*(1) Project [test_col#40]
+- *(1) FileScan parquet [test_col#40]
    Batched: false,
    Format: Parquet,
    Location: InMemoryFileIndex[hdfs://hdfs.host/path/to.parquet],
    PartitionCount: 25,
    PartitionFilters: [],
    PushedFilters: [],
    ReadSchema: struct<test_col:array<bigint>>

# Create test2 dataframe
>>> test2 = df.select('test_col').limit(5) ↵
>>> test2.schema ↵
StructType(List(StructField(test_col,ArrayType(LongType,true),true)))
>>> test2.explain() ↵
== Physical Plan ==
CollectLimit 5
+- *(1) Project [test_col#40]
   +- *(1) FileScan parquet [test_col#40]
     Batched: false,
     Format: Parquet,
     Location: InMemoryFileIndex[hdfs://hdfs.host/path/to.parquet],
     PartitionCount: 25,
     PartitionFilters: [],
     PushedFilters: [],
     ReadSchema: struct<test_col:array<bigint>>

注意到物理计划几乎是相同的,两个 test1test2. 唯一的例外是测试2的计划,开始"CollectLimit5"中。 在设定这个了我跑了 test1.show(5)test2.show(5). 测试,1返回的成果瞬间。 测试2显示出的进展吧2010年的任务,花费了大约20分钟完成(我只有一个执行者)

的问题 为什么试验2(有限)的执行使不相比,试验1(不受限制地)? 该数据集,并导致设置是相同的物理计划几乎完全相同。

2

最好的答案

1

请记住:

  • show() 是的别名 show(20) 和依赖内部 take(n: Int): Array[T]
  • limit(n: Int) 返回的另一个数据集是一个昂贵的作业是读取整体来源
2021-11-23 20:59:09
0

限制导致新的数据框并采取更长的时间,因为这是因为谓词下推目前不支持在你输入文件的格式。 因此阅读整个数据集和施加的限制。

2021-11-24 02:21:07

得到它,这是否意味着两个试验将有更多类似的性能,如果阅读像MySQL而不是HDFS?
cyclobster

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................