Apache spark 如何从表中传输数据集?

Apache spark 如何从表中传输数据集?,apache-spark,apache-spark-sql,spark-structured-streaming,Apache Spark,Apache Spark Sql,Spark Structured Streaming,我必须使用spark将数据从SQL server表加载到本地文件系统中的csv。下面是我使用的代码 val sqlContext=new org.apache.spark.sql.sqlContext(sc) val jdbcSqlConnStr=“jdbc:sqlserver://HostIP:1433;databaseName=DBName;user=UserName;password=PWD;” val jdbcbtable=“dbo.Table” val jdbcDF=sqlContex

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

val sqlContext=new org.apache.spark.sql.sqlContext(sc)
val jdbcSqlConnStr=“jdbc:sqlserver://HostIP:1433;databaseName=DBName;user=UserName;password=PWD;”
val jdbcbtable=“dbo.Table”
val jdbcDF=sqlContext.read.format(“jdbc”).option(“url”,jdbsqlconnstr).option(“dbtable”,jdbcdtable).load()
jdbcDF.write.format(“com.databricks.spark.csv”).save(“D:\\spark\\2”)
这很好用。我需要尝试其他更好的方法来进一步加快上述方法

有没有什么方法可以让我直接从SQLServer将表流式传输到文件系统,而不是在内存中存储一段时间。这比上面的性能好吗?如果是的话,有人能给我提供同样的细节吗

有没有什么方法可以让我直接从SQLServer将表流式传输到文件系统,而不是在内存中存储一段时间

当前版本的ApacheSpark2.2.0不直接支持该功能(并且需要一些编码)

您可以使用(这是一个执行结构化查询的模块)并编写一个自定义流,用于获取新行并创建数据帧进行处理

流式数据源的主要问题是如何跟踪(微批量)执行之间的变化。如果执行
select*fromtable
,而表格在这两个选项之间发生了变化,则只会得到不同的结果。您必须以某种方式更改(批处理)查询以获得正确的结果(例如,表状态之间的增量,即过去和现在的行)。这听起来像是一个笑话,不是吗?这就是我要看的地方,但在ApacheSpark中,这是不受开箱即用支持的


这需要将代码更改为使用
readStream
(而不是
read
)和自定义格式(使用CDC或其他一些“工具”)。

是否有现有的实现?批处理到流似乎是一种常见的用法case@tribbloid这个可以帮你完成任务: