Кэширование заказало Spark DataFrame создает нежелательную работу

Я хочу преобразовать 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: введите описание изображения здесь
  • Если вы используете cache только после parallelize не создано задание.

Почему cache создает задание в этом случае? Как я могу избежать создания задания cache (кэширование DataFrame и без RDD)?

Изменить: я больше исследовал проблему и обнаружил, что без orderBy("t") не создается задание. Почему?

Ответ 1

Я отправил bug ticket и был закрыт со следующей причиной:

Кэширование требует резервного RDD. Это требует, чтобы мы также знали поддерживающие разделы, и это несколько особенное для глобального порядка: он запускает задание (сканирование), потому что нам нужно определить раздел границы.