Spark-sqlserver连接

Tia*_*Tia 2 sql-server data-analysis apache-spark

我们可以将spark与sql-server连接吗?如果是这样,怎么办?我是Spark的新手,我想将服务器连接到spark并直接从sql-server工作,而不是上传.txt或.csv文件。请帮忙,谢谢。

Aja*_*ade 5

// 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)
Run Code Online (Sandbox Code Playgroud)

  • 尽管此代码可以回答问题,但提供有关如何和/或为什么解决问题的其他上下文将提高​​答案的长期价值。 (2认同)
  • 类 SQLContext 已弃用:改用 SparkSession.builder (2认同)

Anu*_*rma 4

这是一些代码片段。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()
Run Code Online (Sandbox Code Playgroud)

需要考虑的一些问题是:

确保防火墙端口对端口 1433 打开。如果使用 Microsoft Azure SQL Server DB,表需要主键。有些方法创建表,但 Spark 的代码没有创建主键,因此表创建失败。

其他需要注意的细节:https://docs.databricks.com/spark/latest/data-sources/sql-databases.html

来源: https: //blogs.msdn.microsoft.com/bigdatasupport/2015/10/22/how-to-allow-spark-to-access-microsoft-sql-server/