Scala 火花问题:如果我不缓存数据帧,那么它将运行多次?

Scala 火花问题:如果我不缓存数据帧,那么它将运行多次?,scala,dataframe,apache-spark,Scala,Dataframe,Apache Spark,如果我不缓存使用带限制选项的spark SQL生成的数据帧,那么每当我编辑结果数据帧并显示它时,是否会产生不稳定的结果 描述 我有一个如下表,它是使用带限制选项的spark SQL生成的: +---------+---+---+---+---+ |partition| | 0| 1| 2| +---------+---+---+---+---+ | 0| 0| 0| 10| 18| | 1| 0| 0| 10| 17| | 2| 0|

如果我不缓存使用带限制选项的spark SQL生成的数据帧,那么每当我编辑结果数据帧并显示它时,是否会产生不稳定的结果

描述

我有一个如下表,它是使用带限制选项的spark SQL生成的:

+---------+---+---+---+---+
|partition|   |  0|  1|  2|
+---------+---+---+---+---+
|        0|  0|  0| 10| 18|
|        1|  0|  0| 10| 17|
|        2|  0|  0| 13| 17|
+---------+---+---+---+---+
如果我添加一列来获取行和,并且再次
show()
,则数据帧具有如下不同的项:

+---------+---+---+---+---+-------+-----------+------------+------------------+------------------+
|partition|   |  0|  1|  2|row_sum|percent of |percent of 0|      percent of 1|      percent of 2|
+---------+---+---+---+---+-------+-----------+------------+------------------+------------------+
|        0|  0|  0| 10| 13|     23|        0.0|         0.0| 43.47826086956522| 56.52173913043478|
|        1|  0|  0| 13| 16|     29|        0.0|         0.0|44.827586206896555|55.172413793103445|
|        2|  0|  0| 15| 14|     29|        0.0|         0.0|51.724137931034484|48.275862068965516|
+---------+---+---+---+---+-------+-----------+------------+------------------+------------------+
我怀疑编辑从第一个spark SQL查询获得的原始数据帧的代码将导致重新运行第一个spark SQL查询并从新结果进行编辑

这是真的吗?

Cache()
在spark中是一种转换,当您对该数据帧调用任何操作时,都会对其进行延迟计算


现在,如果您正在编写一个使用limit仅获取10条记录的查询,那么当您调用类似于
show
的操作时,它将具体化代码,并在此时获取10条记录。现在,如果您没有缓存数据帧,并且如果您在新创建的数据帧上执行多次转换并再次执行操作,则spark将从图的根执行转换,这就是为什么如果您没有缓存该数据帧,每次都会看到不同的输出。

谢谢您的回答。我理解,正如我所怀疑的,如果我不缓存它,它将被重新计算。