Python 缓存有序的Spark数据帧会创建不需要的作业

Python 缓存有序的Spark数据帧会创建不需要的作业,python,apache-spark,pyspark,apache-spark-sql,pyspark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Sql,我希望将RDD转换为数据帧,并希望缓存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.par

我希望将RDD转换为数据帧,并希望缓存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
    生成
    orderBy
    1作业后才使用
    cache
  • 如果仅在
    并行化后使用
    缓存
    ,则不会生成作业
在这种情况下,
cache
为什么会生成作业? 如何避免生成
缓存
(缓存数据帧而不缓存RDD)的作业

Edit:我进一步调查了这个问题,发现没有
orderBy(“t”)
就不会生成作业。为什么?

我提交了一份申请,但由于以下原因被关闭:

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


随着你的更新澄清了这个问题,我删除了我原来的答案。这是一个有趣的问题,因为orderBy(“t”)按其应该的方式被延迟计算,没有orderBy的cache()也会被延迟计算,但总的来说,我也不知道为什么要为纯transformer操作执行任何操作。