考虑懒惰的评价,行动等,我的理解来自其他人:
如果我重复访问数据框,
是根据Hive表构建的,
除了复制到单独的非可变Hive表之外,我如何获得一致的数据帧,然后是一个ORACLE的读一致性模型?
我假设TempView会解决问题,还是不是这样?其实我觉得不是。性能问题。
理想情况下,我希望数据帧将所有记录保持不变,但可能不是它与惰性协议的工作方式。
答案 0 :(得分:0)
除了复制到单独的非可变Hive表之外,如何获得一致的数据帧,然后获得la ORACLE的读一致性模型?
根本没有这样的选择。
天真地可以建议cache
并强制评估:
val df: DataFrame = ???
df.cache // Default StorageLevel - MEMORY_AND_DISK
df.foreach(_ => ())
但它不提供必要的保证,特别是在节点故障的情况下。您可以通过将StorageLevel
设置为MEMORY_AND_DISK_2
来提高可靠性,但仍可能导致无效的正确性错误。
所以直言不讳 - Spark不是一个数据库,不要试图像对待它一样。如果您已经使用Hive和可变状态,那么跳过Spark并使用Hive的ACID和事务选项。