我正试图开发一个后端模块,这需要我在DataFrame上做几个sql更新,由hdfs中的拼花格式支持。我感兴趣的是了解多个sql更新如何影响DataFrame的RDD沿袭,以及在DataFrame上执行几个频繁的sql更新是否会引起关注,因为根据我的理解,DataFrame上的单个sql更新将是一个转换。是否存在等同于在单个沿袭步骤中对数据框进行批量更新的方法?
两个重要的注意事项:
- Spark
DataFrames
是不可变的,因此不能更新。您只能创建一个新的DataFrame
。 -
转换和沿袭是特定于RDD的。虽然内部
DataFrame
(Dataset
)上的每一组操作都被转换为一些DAG并使用RDD
执行,但RDD
阶段和您在Dataset
上应用的方法之间没有微不足道的对应关系。操作人员可以透明地重新排列、移除或压在一起。查询是如何转换的不是合约的一部分,如果你对给定版本的细节感兴趣,你应该检查执行计划以及相应RDD的explain
DAG。一般来说,单个操作可能需要0(如果通过投影或使用琐碎谓词消除了特定操作)和两个阶段(典型的聚合)之间。如果可能的话,投影通常被安排在一起,聚合行为随着时间的推移而改变。
最后,某些操作可能需要多个作业来推断模式或计算统计信息。