如何在Apache Spark中执行SQL查询

raj*_*uri 2 sql apache-spark

我是Apache Spark的新手。
我已经在本地Windows机器上配置了spark 2.0.2。我已经完成了火花的“字数统计”示例。
现在,我在执行SQL查询时遇到了问题。我已经搜索了相同的内容,但没有得到正确的指导。


任何帮助,不胜感激!
先谢谢了!!

Gle*_*olt 9

在 Spark 2.x 中,您不再引用sqlContext,而是spark,因此您需要执行以下操作:

spark
  .read
  .format("jdbc")
  .option("url", "jdbc:mysql://localhost:3306/mydb")
  .option("driver", "com.mysql.jdbc.Driver")
  .option("dbtable", "mydb")
  .option("user", "root")
  .option("password", "")
  .load()
Run Code Online (Sandbox Code Playgroud)


Shi*_*nsh 6

因此,您需要做这些事情才能完成它,

在Spark 2.0.2中,我们有SparkSession,其中包含SparkContext实例以及sqlContext实例。

因此,步骤将是:

步骤1:建立SparkSession

val spark = SparkSession.builder().appName("MyApp").master("local[*]").getOrCreate()
Run Code Online (Sandbox Code Playgroud)

步骤2:在您的案例Mysql中从数据库加载。

val loadedData=spark
      .read
      .format("jdbc")
      .option("url", "jdbc:mysql://localhost:3306/mydatabase")
      .option("driver", "com.mysql.jdbc.Driver")
      .option("mytable", "mydatabase")
      .option("user", "root")
      .option("password", "toor")
      .load().createOrReplaceTempView("mytable")
Run Code Online (Sandbox Code Playgroud)

步骤3:现在,您可以像在SqlDatabase中一样运行SqlQuery。

val dataFrame=spark.sql("Select * from mytable")
dataFrame.show()
Run Code Online (Sandbox Code Playgroud)

PS:如果使用DataFrame Api更好,或者如果使用DataSet Api更好,但是对于那些您需要阅读文档。

链接到文档:https : //spark.apache.org/docs/2.0.0/api/scala/index.html#org.apache.spark.sql.Dataset