Python 缓存有序的Spark数据帧会创建不需要的作业
我希望将RDD转换为数据帧,并希望缓存RDD的结果:Python 缓存有序的Spark数据帧会创建不需要的作业,python,apache-spark,pyspark,apache-spark-sql,pyspark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Sql,我希望将RDD转换为数据帧,并希望缓存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.par
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
1作业后才使用orderBy
:cache
- 如果仅在
并行化后使用
,则不会生成作业缓存
cache
为什么会生成作业?
如何避免生成缓存
(缓存数据帧而不缓存RDD)的作业
Edit:我进一步调查了这个问题,发现没有orderBy(“t”)
就不会生成作业。为什么?我提交了一份申请,但由于以下原因被关闭:
缓存需要支持RDD。这要求我们也知道
备份分区,这对于全局顺序有点特殊:
它会触发作业(扫描),因为我们需要确定分区
界限
随着你的更新澄清了这个问题,我删除了我原来的答案。这是一个有趣的问题,因为orderBy(“t”)按其应该的方式被延迟计算,没有orderBy的cache()也会被延迟计算,但总的来说,我也不知道为什么要为纯transformer操作执行任何操作。