如果我不缓存使用带有limit选项的spark SQL生成的dataframe,当我编辑得到的dataframe并显示它时,我会得到不稳定的结果吗?
描述。
我有一个类似下面的表格,它是通过使用带有limit选项的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查询并从新结果进行编辑。
这是真的吗?
发布于 2021-04-21 12:02:11
spark中的Cache()是一种转换,当您在该数据帧上调用任何操作时,它都会延迟求值。
现在,如果您正在使用limit编写一个仅获取10条记录的查询,那么当您在其上调用像show这样的操作时,它将具体化代码并同时获取10条记录。现在,如果你没有缓存数据帧,如果你执行多个转换,并再次对新创建的数据帧执行一个操作,那么spark将从图的根开始执行转换,这就是为什么如果你不缓存该数据帧,你每次都会看到不同的输出。
https://stackoverflow.com/questions/67188830
复制相似问题