Spark-sqlserver连接
Spark-sqlserver connection
我们可以将 spark 连接到 sql-server 吗?如果是这样,如何?
我是 spark 的新手,我想将服务器连接到 spark 并直接从 sql-server 工作,而不是上传 .txt 或 .csv 文件。请帮忙,谢谢。
这里有一些代码片段。 DataFrame 用于创建 table t2 并插入数据。 SqlContext 用于将数据从 t2 table 加载到 DataFrame 中。我将 spark.driver.extraClassPath 和 spark.executor.extraClassPath 添加到我的 spark-default.conf 文件中。
//Spark 1.4.1
//Insert data from DataFrame
case class Conf(mykey: String, myvalue: String)
val data = sc.parallelize( Seq(Conf("1", "Delaware"), Conf("2", "Virginia"), Conf("3", "Maryland"), Conf("4", "South Carolina") ))
val df = data.toDF()
val url = "jdbc:sqlserver://wcarroll3:1433;database=mydb;user=ReportUser;password=ReportUser"
val table = "t2"
df.insertIntoJDBC(url, table, true)
//Load from database using SqlContext
val url = "jdbc:sqlserver://wcarroll3:1433;database=mydb;user=ReportUser;password=ReportUser"
val driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
val tbl = { sqlContext.load("jdbc", Map( "url" -> url, "driver" -> driver, "dbtable" -> "t2", "partitionColumn" -> "mykey", "lowerBound" -> "0", "upperBound" -> "100", "numPartitions" -> "1" ))}
tbl.show()
需要考虑的一些问题是:
确保为端口 1433 打开防火墙端口。
如果使用 Microsoft Azure SQL 服务器数据库,tables 需要一个主键。某些方法创建 table,但 Spark 的代码未创建主键,因此 table 创建失败。
其他需要注意的细节:https://docs.databricks.com/spark/latest/data-sources/sql-databases.html
// Spark 2.x
import org.apache.spark.SparkContext
// Create dataframe on top of SQLServer database table
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val jdbcDF = sqlContext.read.format("jdbc").option("driver" , "com.microsoft.sqlserver.jdbc.SQLServerDriver") \
.option("url", "jdbc:sqlserver://XXXXX.com:port;databaseName=xxx") \
.option("dbtable", "(SELECT * FROM xxxx) tmp") \
.option("user", "xxx") \
.option("password", "xxx") \
.load()
// show sample records from data frame
jdbcDF.show(5)
在 SQL 服务器大数据集群中,还包括 Spark。从 SQL Server 2019 version 开始,大数据集群允许通过 HDFS 文件系统和其他数据源对数据进行大规模、近实时的处理。它还利用集成到一个环境中的 Apache Spark 框架来管理、监视和保护您的环境。
Weissman, B.& Van de Laar E.
(2019)。 SQL 服务器大数据集群:基于候选版本 1 的早期第一版。荷兰:Apress。
我们可以将 spark 连接到 sql-server 吗?如果是这样,如何? 我是 spark 的新手,我想将服务器连接到 spark 并直接从 sql-server 工作,而不是上传 .txt 或 .csv 文件。请帮忙,谢谢。
这里有一些代码片段。 DataFrame 用于创建 table t2 并插入数据。 SqlContext 用于将数据从 t2 table 加载到 DataFrame 中。我将 spark.driver.extraClassPath 和 spark.executor.extraClassPath 添加到我的 spark-default.conf 文件中。
//Spark 1.4.1
//Insert data from DataFrame
case class Conf(mykey: String, myvalue: String)
val data = sc.parallelize( Seq(Conf("1", "Delaware"), Conf("2", "Virginia"), Conf("3", "Maryland"), Conf("4", "South Carolina") ))
val df = data.toDF()
val url = "jdbc:sqlserver://wcarroll3:1433;database=mydb;user=ReportUser;password=ReportUser"
val table = "t2"
df.insertIntoJDBC(url, table, true)
//Load from database using SqlContext
val url = "jdbc:sqlserver://wcarroll3:1433;database=mydb;user=ReportUser;password=ReportUser"
val driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
val tbl = { sqlContext.load("jdbc", Map( "url" -> url, "driver" -> driver, "dbtable" -> "t2", "partitionColumn" -> "mykey", "lowerBound" -> "0", "upperBound" -> "100", "numPartitions" -> "1" ))}
tbl.show()
需要考虑的一些问题是:
确保为端口 1433 打开防火墙端口。 如果使用 Microsoft Azure SQL 服务器数据库,tables 需要一个主键。某些方法创建 table,但 Spark 的代码未创建主键,因此 table 创建失败。
其他需要注意的细节:https://docs.databricks.com/spark/latest/data-sources/sql-databases.html
// Spark 2.x
import org.apache.spark.SparkContext
// Create dataframe on top of SQLServer database table
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val jdbcDF = sqlContext.read.format("jdbc").option("driver" , "com.microsoft.sqlserver.jdbc.SQLServerDriver") \
.option("url", "jdbc:sqlserver://XXXXX.com:port;databaseName=xxx") \
.option("dbtable", "(SELECT * FROM xxxx) tmp") \
.option("user", "xxx") \
.option("password", "xxx") \
.load()
// show sample records from data frame
jdbcDF.show(5)
在 SQL 服务器大数据集群中,还包括 Spark。从 SQL Server 2019 version 开始,大数据集群允许通过 HDFS 文件系统和其他数据源对数据进行大规模、近实时的处理。它还利用集成到一个环境中的 Apache Spark 框架来管理、监视和保护您的环境。
Weissman, B.& Van de Laar E. (2019)。 SQL 服务器大数据集群:基于候选版本 1 的早期第一版。荷兰:Apress。