我们可以将spark连接到sql-server吗?如果是这样,怎么样? 我是新手,我希望连接服务器以直接从sql-server连接,而不是上传.txt或.csv文件。请帮忙,谢谢。
答案 0 :(得分:3)
// 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)
答案 1 :(得分:1)
以下是一些代码段。 DataFrame用于创建表t2和插入数据。 SqlContext用于将数据从t2表加载到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 Server DB,则表需要主键。有些方法会创建表,但Spark的代码不会创建主键,因此表创建失败。
需要注意的其他细节:https://docs.databricks.com/spark/latest/data-sources/sql-databases.html
答案 2 :(得分:0)
在SQL Server大数据群集中,还包含Spark。从SQL Server 2019版本开始,大数据群集允许通过HDFS文件系统和其他数据源进行大规模,近乎实时的数据处理。它还利用Apache Spark框架,该框架已集成到一个环境中,用于环境的管理,监视和安全。
Weissman,B.和Van de Laar E. (2019)。 SQL Server大数据群集:基于候选版本1的早期第一版。荷兰:Apress。