Apache spark Spark如何处理与时间相关的JDBC数据?
我正在尝试通过每日ETL Spark作业将S3上的Spark数据库与旧的Oracle数据库同步。我试图了解Spark在连接到Oracle之类的RDS以获取数据时会做什么Apache spark Spark如何处理与时间相关的JDBC数据?,apache-spark,jdbc,pyspark,apache-spark-sql,Apache Spark,Jdbc,Pyspark,Apache Spark Sql,我正在尝试通过每日ETL Spark作业将S3上的Spark数据库与旧的Oracle数据库同步。我试图了解Spark在连接到Oracle之类的RDS以获取数据时会做什么 它是否只抓取Spark向DB发出请求时的数据(即,如果它在2/2 17:00:00从Oracle DB抓取数据,它将只抓取到该时间点的数据)?本质上说,2/2 17:00:01的任何新数据或更新都不会从数据提取中获得?好吧,这取决于具体情况。通常,除非应用程序和数据库设计明确保证,否则您必须假设这种行为是不确定的 默认情况下,S
它是否只抓取Spark向DB发出请求时的数据(即,如果它在2/2 17:00:00从Oracle DB抓取数据,它将只抓取到该时间点的数据)?本质上说,2/2 17:00:01的任何新数据或更新都不会从数据提取中获得?好吧,这取决于具体情况。通常,除非应用程序和数据库设计明确保证,否则您必须假设这种行为是不确定的 默认情况下,Spark将在每次对相应Spark数据集执行操作时获取数据。这意味着每次执行都可能看到数据库的不同状态 这种行为可能受到多个因素的影响:
- 显式缓存和可能的缓存逐出
- 使用洗牌文件进行隐式缓存
- 用于JDBC数据源的精确参数集
- 在数据库中使用不可变、仅追加和时间戳记录,并从Spark发出与时间戳相关的查询
- 执行一致的数据库转储,并将其用作Spark作业的直接输入
虽然第一种方法功能更强大,但如果您使用的是现有的体系结构,那么实现起来就困难多了。您能用代码解释一下这个问题吗?