apache-spark - 与 repartition() 一起使用时,Spark cache() 不起作用

标签 apache-spark caching pyspark

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

编辑:

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

我试过在不同的行上做它们并且行得通。

编辑:

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

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

最佳答案

Dataframes 和 RDD 一样是不可变的,所以虽然你在 df 上调用 repartition,但你并没有将它分配给任何 DF,当前的 df 也不会改变。

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

以上一个行不通。

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

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

所以试试这个。

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

这应该有效。

关于apache-spark - 与 repartition() 一起使用时,Spark cache() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57223732/

相关文章:

java - Spark 作业在本地运行时可以工作,但在独立模式下则无法工作

python - 将 Pandas 转为 pyspark 表达式

apache-spark - 过滤超前/滞后为特定值的行(带过滤器的窗口)

python - 读取 Dataframewriter Pyspark 编写的 Csv 文件

c++ - 使用 VS2012/VTune 进行缓存分析

java - Hibernate 5.2 中二级缓存实体的使用

ios - AFNetworking - 不缓存响应

apache-spark - 如何检查 Spark 中两个 DataFrame 列的交集

mysql - 使用 JDBC 连接器读取 Spark 中 MySQL 表的一部分

apache-spark - 由于 DeadlineExceededException,Spark 作业无法写入 Alluxio