我理解Scala中有两种类型的操作
像map(),filter()这样的转换是懒惰的.因此,可以在Action执行上完成该优化.例如,如果我执行action first(),那么Spark将优化为只读取第一行.
但是为什么persist()操作会被懒惰地评估.因为无论我采取哪种方式,热切地或懒惰地,它都将按照存储级别保持整个RDD.
能否详细说明为什么persist()是转型而不是行动.
我想将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(缓存DataFrame而没有RDD)?
编辑:我对问题进行了更多调查,发现orderBy("t")没有生成任何工作.为什么?