Кэширование заказало 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. Это требует, чтобы мы также знали поддерживающие разделы, и это несколько особенное для глобального порядка: он запускает задание (сканирование), потому что нам нужно определить раздел границы.