我有以下结构化查询:将持续数据帧重复计算多次?
val A = 'load somedata from HDFS'.persist(StorageLevel.MEMORY_AND_DISK_SER)
val B = A.filter('condition 1')
val C = A.filter('condition 2')
val D = A.filter('condition 3')
val E = A.filter('condition 4')
val F = A.filter('condition 5')
val G = A.filter('condition 6')
val H = A.filter('condition 7')
val I = B.union(C).union(D).union(E).union(F).union(G).union(H)
我坚持数据帧A,使得当我使用B/C/d/E/F/G/H时,A数据帧应当只计算一旦?但是,这项工作的DAG低于:
从上面的DAG,似乎阶段6-12的所有执行和数据帧A被计算的7倍?
为什么会发生这种情况?
也许DAG只是假的?我发现阶段7-12的顶部没有行,其中阶段6确实有两行来自其他阶段
我没有列出所有的操作。在union
操作之后,我将I
数据帧保存到HDFS。对I
数据帧执行此操作会使持久操作真的完成吗?或者我必须在A
数据帧上执行动作操作(例如count
)以在重新使用A
数据帧之前触发持久操作?
数据框是否像维护数据库一样维护数据行? – BDR