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

时间:2017-10-18 07:52:32

标签: apache-spark apache-spark-sql spark-structured-streaming

我必须使用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 server流式传输表并写入文件系统而不是在内存中存储一​​段时间。这比上面表现更好吗?如果是,有人可以提供相同的详细信息

1 个答案:

答案 0 :(得分:0)

  

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

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

您可以使用Spark Structured Streaming(该模块连续执行结构化查询)并编写自定义流Source,以便执行新行提取并创建DataFrame进行处理。

这几乎需要更改您的代码以使用readStream(不是read)和自定义格式。