缓存有序Spark DataFrame会创建不需要的作业

R1t*_*chY 11 python apache-spark apache-spark-sql pyspark pyspark-sql

我想将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()
Run Code Online (Sandbox Code Playgroud)
  • 如果您不使用某个cache功能,则不会生成任何作业.
  • 如果cache仅在为orderBy1生成1个作业后使用cache:在此输入图像描述
  • 如果cache仅在parallelize生成无作业后使用.

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

编辑:我对问题进行了更多调查,发现orderBy("t")没有生成任何工作.为什么?

R1t*_*chY 3

我提交了一个错误票,但由于以下原因被关闭:

缓存需要支持 RDD。这要求我们还知道支持分区,这对于全局订单来说有些特殊:它会触发作业(扫描),因为我们需要确定分区边界。