与repartition()配合使用时,Spark cache()不起作用

时间:2019-07-26 16:16:07

标签: apache-spark caching pyspark

spark cache()函数与repartition()一起使用时不会缓存数据帧。谁能解释为什么会这样?

编辑:

df.repartition(1000).cache()
df.count()

我尝试在单独的行上进行操作,并且可行。

编辑:

df2 = df1.repartition(1000)
df2.cache()
df2.count()

我希望数据帧被缓存,但是在UI的存储中看不到它

2 个答案:

答案 0 :(得分:1)

数据帧像RDD一样是不可变的,因此,尽管您在df上调用了重新分区,但是您并未将其分配给任何DF,并且当前df不会更改。

df.repartition(1000).cache()
df.count()

以上都不起作用。

df.repartition(1000)
df.cache()
df.count()

对于以上代码,如果您签入存储,它将不会显示已缓存的1000个分区。存储将显示缓存的分区为 df.rdd.getNumPartitions (不是1000)。

所以尝试这个。

val df1 = df.repartition(1000).cache()
df1.count()

这应该有效。

答案 1 :(得分:0)

您必须调用一个操作,以便缓存被触发。 做

df2 = df1.repartition(1000)
df2.cache().count()