我目前正在使用
val df=longLineageCalculation(....)
val newDf=sparkSession.createDataFrame(df.rdd, df.schema)
newDf.join......
Run Code Online (Sandbox Code Playgroud)
为了节省计算计划时的时间,但是文档称检查点是“削减”沿袭的建议方法。但是我不想付出将RDD保存到磁盘的代价。
我的过程是一个不那么长的批处理过程,可以无问题地重新启动,因此检查点对我没有好处(我认为)。
使用“我的”方法会出现什么问题?(文档建议使用检查点,这种检查会比较昂贵,而不是用这个来破坏血统,我想知道原因)
只想到我能猜到,如果某个节点在我的“血统破坏”之后失败了,也许我的过程将失败,而检查点将正常运行吗?(如果DF被缓存而不是检查点该怎么办?)
谢谢!
编辑:
根据SMaZ的回答,我自己的知识以及他提供的文章。使用createDataframe(这是一个Dev-API,因此使用“我” /您自己承担风险)将沿袭保留在内存中(对我来说这不是问题,因为我没有内存问题,而且沿袭也不大)。
有了它,Spark看起来(如果没有经过100%测试)应该能够重建任何失败的内容。
由于在以下执行中不使用数据,因此我将使用cache + createDataframe与检查点(如果我没有记错的话,实际上是cache + saveToHDFS +“ createDataFrame”)。
我的过程不是很关键(如果崩溃),因为用户将始终期望结果并手动启动它,因此,如果出现问题,他们可以重新启动(+ Spark将重新启动)或给我打电话,以便我接听无论如何都存在一些风险,但是我99%的确没有任何风险:)