相关疑难解决方法(0)

为什么在Spark中懒惰地评估persist()

我理解Scala中有两种类型的操作

  1. 转换
  2. 操作

像map(),filter()这样的转换是懒惰的.因此,可以在Action执行上完成该优化.例如,如果我执行action first(),那么Spark将优化为只读取第一行.

但是为什么persist()操作会被懒惰地评估.因为无论我采取哪种方式,热切地或懒惰地,它都将按照存储级别保持整个RDD.

能否详细说明为什么persist()是转型而不是行动.

scala apache-spark

11
推荐指数
2
解决办法
4628
查看次数

缓存有序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()
Run Code Online (Sandbox Code Playgroud)
  • 如果您不使用某个cache功能,则不会生成任何作业.
  • 如果cache仅在为orderBy1生成1个作业后使用cache:在此输入图像描述
  • 如果cache仅在parallelize生成无作业后使用.

为什么cache在这种情况下生成一份工作?如何避免生成cache(缓存DataFrame而没有RDD)?

编辑:我对问题进行了更多调查,发现orderBy("t")没有生成任何工作.为什么?

python apache-spark apache-spark-sql pyspark pyspark-sql

11
推荐指数
1
解决办法
789
查看次数