Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark如何处理与时间相关的JDBC数据?_Apache Spark_Jdbc_Pyspark_Apache Spark Sql - Fatal编程技术网

Apache spark Spark如何处理与时间相关的JDBC数据?

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

我正在尝试通过每日ETL Spark作业将S3上的Spark数据库与旧的Oracle数据库同步。我试图了解Spark在连接到Oracle之类的RDS以获取数据时会做什么


它是否只抓取Spark向DB发出请求时的数据(即,如果它在2/2 17:00:00从Oracle DB抓取数据,它将只抓取到该时间点的数据)?本质上说,2/2 17:00:01的任何新数据或更新都不会从数据提取中获得?

好吧,这取决于具体情况。通常,除非应用程序和数据库设计明确保证,否则您必须假设这种行为是不确定的

默认情况下,Spark将在每次对相应Spark数据集执行操作时获取数据。这意味着每次执行都可能看到数据库的不同状态

这种行为可能受到多个因素的影响:

  • 显式缓存和可能的缓存逐出
  • 使用洗牌文件进行隐式缓存
  • 用于JDBC数据源的精确参数集
在前两种情况下,Spark可以重用已获取的数据,而无需返回原始数据源。第三个更有趣。默认情况下,Spark使用单个事务获取数据,但有一些方法支持基于列范围或谓词的并行读取。如果使用其中一个,Spark将使用多个事务获取数据,每个事务都可以观察数据库的不同状态

如果需要一致的时间点语义,则基本上有两种选择:

  • 在数据库中使用不可变、仅追加和时间戳记录,并从Spark发出与时间戳相关的查询
  • 执行一致的数据库转储,并将其用作Spark作业的直接输入

虽然第一种方法功能更强大,但如果您使用的是现有的体系结构,那么实现起来就困难多了。

您能用代码解释一下这个问题吗?