【发布时间】:2017-08-14 14:01:37
【问题描述】:
我想将一个 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 的作业生成(缓存 DataFrame 而没有 RDD)?
编辑:我对问题进行了更多调查,发现没有orderBy("t") 不会生成作业。为什么?
【问题讨论】:
-
随着您的更新澄清了问题,我删除了我原来的答案。这是一个有趣的问题,因为 orderBy("t") 被延迟评估,而没有 orderBy 的 cache() 也被延迟评估,但是我也不确定为什么要为纯粹的转换器操作执行任何操作。
标签: python apache-spark pyspark apache-spark-sql pyspark-sql