如何从表中流式传输数据集



我必须使用spark将数据从SQL服务器表加载到本地文件系统中的csv。下面是我使用的代码。

val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val jdbcSqlConnStr = "jdbc:sqlserver://HostIP:1433;databaseName=DBName;user=UserName;password=PWD;"
val jdbcDbTable = "dbo.Table"
val jdbcDF = sqlContext.read.format("jdbc").option("url",jdbcSqlConnStr).option("dbtable",jdbcDbTable).load()
jdbcDF.write.format("com.databricks.spark.csv").save("D:\Spark\2")

这很好用。我需要尝试任何其他更好的方法来进一步加快上述方法。

有没有什么方法可以让我直接从sql服务器流式传输表并写入文件系统,而不是在内存中存储一段时间。这比上面的表现好吗?如果是,有人能为我提供相同的详细信息吗

有没有任何方法可以直接从sql server流式传输表并写入文件系统,而不是在内存中存储一段时间。

当前版本的Apache Spark 2.2.0不直接支持该功能(需要一些编码)。

您可以使用Spark Structured Streaming(这是一个执行结构化查询的模块),并编写一个自定义流式处理源,该源将执行新行提取并创建一个DataFrame进行处理。

流源的主要问题是如何跟踪(微批处理)执行之间的变化。如果执行select * from table,而表在两者之间发生了更改,则只会得到不同的结果。您必须以某种方式更改(批处理)查询以获得正确的结果(比如表的状态之间的delta,即当时和现在的行)。这听起来像是一个变更数据捕获,不是吗?这就是我要研究的地方,但这在Apache Spark中是不受开箱即用支持的。

这几乎需要更改代码以使用readStream(而不是read)和自定义格式(使用CDC或其他一些"工具")。

相关内容

  • 没有找到相关文章

最新更新