【问题标题】:Why is `spark.range(100).orderBy('id', ascending=False).rdd` not lazy and trigger an action?为什么 `spark.range(100).orderBy('id', ascending=False).rdd` 不懒惰并触发动作?
【发布时间】:2019-09-18 04:12:21
【问题描述】:

Spark v2.4 pyspark

spark.range(100).orderBy('id', ascending=False).rdd

当我输入上述内容时,它会立即生成一个 spark 作业。我发现这很令人惊讶,因为我什至没有指定操作。

例如spark.range(100).repartition(10, 'id').sortWithinPartitions('id').rdd 按预期工作,不会触发任何作业..

一个相关的问题是Why does sortBy transformation trigger a Spark job?

它确认 RDD sortBy 可以触发一个动作。

但这里我使用的是 DataFrame。 spark.range(100).orderBy('id', ascending=False) 工作正常。只有在我访问 .rdd 时才会触发该作业。

【问题讨论】:

  • 谢谢这是相关的。但在这里我使用的是 DataFrame。 spark.range(100).orderBy('id', ascending=False) 工作正常。只有在我访问 .rdd 后才会触发该作业

标签: apache-spark pyspark rdd pyspark-sql


【解决方案1】:

并非所有转换都是 100% 懒惰的。 OrderBy 需要评估 RDD 以确定数据的范围,因此它既涉及转换,也涉及操作。

【讨论】:

    猜你喜欢
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 2013-03-15
    相关资源
    最近更新 更多