【问题标题】:Caching ordered Spark DataFrame creates unwanted job缓存有序 Spark DataFrame 会创建不需要的作业
【发布时间】:2017-08-14 14:01:37
【问题描述】:

我想将一个 RDD 转换为一个 DataFrame 并想缓存 RDD 的结果:

from pyspark.sql import *
from pyspark.sql.types import *
import pyspark.sql.functions as fn

schema = StructType([StructField('t', DoubleType()), StructField('value', DoubleType())])

df = spark.createDataFrame(
    sc.parallelize([Row(t=float(i/10), value=float(i*i)) for i in range(1000)], 4), #.cache(),
    schema=schema,
    verifySchema=False
).orderBy("t") #.cache()
  • 如果您不使用 cache 函数,则不会生成作业。
  • 如果仅在为cache 生成orderBy 1 个作业后使用cache:
  • 如果您仅在parallelize 之后使用cache,则不会生成作业。

为什么cache 在这种情况下会生成作业? 如何避免 cache 的作业生成(缓存 DataFrame 而没有 RDD)?

编辑:我对问题进行了更多调查,发现没有orderBy("t") 不会生成作业。为什么?

【问题讨论】:

  • 随着您的更新澄清了问题,我删除了我原来的答案。这是一个有趣的问题,因为 orderBy("t") 被延迟评估,而没有 orderBy 的 cache() 也被延迟评估,但是我也不确定为什么要为纯粹的转换器操作执行任何操作。

标签: python apache-spark pyspark apache-spark-sql pyspark-sql


【解决方案1】:

我提交了bug ticket,但由于以下原因被关闭:

缓存需要支持 RDD。这需要我们也知道 支持分区,这对于全局顺序有些特殊: 它触发一个作业(扫描),因为我们需要确定分区 界限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 2019-07-08
    • 2012-02-28
    • 1970-01-01
    • 2015-04-13
    相关资源
    最近更新 更多