spark cache()函数与repartition()一起使用时不会缓存数据帧。谁能解释为什么会这样?
编辑:
df.repartition(1000).cache()
df.count()
我尝试在单独的行上进行操作,并且可行。
编辑:
df2 = df1.repartition(1000)
df2.cache()
df2.count()
我希望数据帧被缓存,但是在UI的存储中看不到它
答案 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()