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