【问题标题】:How to Connect Spark SQL with My SQL Database Scala如何将 Spark SQL 与 My SQL 数据库 Scala 连接起来
【发布时间】:2019-08-19 13:17:14
【问题描述】:

问题陈述:

嗨,我是 Spark World 的新手。我想查询 MySQL 数据库,然后将一张表加载到 Spark 中。然后我想使用 SQL Query 在表上应用一些过滤器。过滤结果后,我想将结果作为 JSON 返回。所有这些我们都必须在一个独立的 Scala 基础应用程序中完成。

我正在努力初始化 Spark 上下文并收到错误消息。我知道我遗漏了一些信息。

有人可以看看代码并告诉我我需要做什么。

代码:

import application.ApplicationConstants
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.{SparkSession, Dataset, Row, Column, SQLContext}

var sc: SparkContext = null

    val sparkSession = SparkSession.builder().master("spark://10.62.10.71:7077")
      .config("format","jdbc")
      .config("url","jdbc:mysql://localhost:3306/test")
      .config("user","root")
      .config("password","")
      .appName("MySQLSparkConnector")
      .getOrCreate()

    var conf = new SparkConf()
    conf.setAppName("MongoSparkConnectorIntro")
      .setMaster("local")
      .set("format", "jdbc")
      .set("url","jdbc:mysql://localhost:3306/test")
      .set("user","root")
      .set("password","")

    sc = new SparkContext(conf)
val connectionProperties = new java.util.Properties
    connectionProperties.put("user", username)
    connectionProperties.put("password", password)
     val customDF2 = sparkSession.read.jdbc(url,"employee",connectionProperties)

    println("program ended")

错误:

以下是我得到的错误:

64564 [main] ERROR org.apache.spark.SparkContext - Error initializing SparkContext.
java.lang.NullPointerException
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:560)
    at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2520)
    at org.apache.spark.sql.SparkSession$Builder.$anonfun$getOrCreate$5(SparkSession.scala:935)
    at scala.Option.getOrElse(Option.scala:121)
    at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:926)
    at manager.SparkSQLMySQLDBConnector$.main(SparkSQLMySQLDBConnector.scala:21)
    at manager.SparkSQLMySQLDBConnector.main(SparkSQLMySQLDBConnector.scala)
64566 [main] INFO org.apache.spark.SparkContext - SparkContext already stopped.
Exception in thread "main" java.lang.NullPointerException
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:560)
    at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2520)
    at org.apache.spark.sql.SparkSession$Builder.$anonfun$getOrCreate$5(SparkSession.scala:935)
    at scala.Option.getOrElse(Option.scala:121)
    at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:926)
    at manager.SparkSQLMySQLDBConnector$.main(SparkSQLMySQLDBConnector.scala:21)
    at manager.SparkSQLMySQLDBConnector.main(SparkSQLMySQLDBConnector.scala)

P.S:如果有人可以给我任何显示 Scala 类似场景的链接或教程。

版本:

火花:2.4.0 斯卡拉:2.12.8 MySQL 连接器 Jar:8.0.13

【问题讨论】:

    标签: mysql scala apache-spark apache-spark-sql


    【解决方案1】:

    我认为你在搞乱创建 spark 上下文和配置来连接 MYSQL

    如果您使用的是 spark 2.0+,则仅使用 SparkSession 作为入口点

    val spark = SparkSession.builder().master("local[*]").appName("Test").getOrCreate
    
    //Add Properties asbelow  
    val prop = new java.util.Properties()
    prop.put("user", "user")
    prop.put("password", "password")
    val url = "jdbc:mysql://host:port/dbName"
    

    现在用数据框读取表格

    val df = spark.read.jdbc(url, "tableName", prop)
    

    要访问sparkContextsqlContext,您可以从SparkSession 访问

    val sc = spark.sparkContext
    
    val sqlContext = spark.sqlContext
    

    确保您在类路径中有mysql-connector-java jar,将依赖项添加到您的pom.xmlbuilt.sbt

    希望这会有所帮助!

    【讨论】:

    • 感谢分享代码。我已经用确切的版本更新了这个问题。当我尝试您陈述的逻辑时。我的 Spark 控制台现在出现以下错误:
    • 在为单向 message.java.io.InvalidClassException 调用 RpcHandler#receive() 时出错:org.apache.spark.deploy.ApplicationDescription;本地类不兼容:stream classdesc serialVersionUID = 5355123861728677005,本地类serialVersionUID = 6543101073799644159
    • 你能用 scala 2.11,我认为 scala 2.12 仍然是实验性的。
    • 你能指导我进行另一个查询吗?如果我需要对我读取的表执行查询。我将在 DataFrame 或 SQL 上下文中执行此操作?
    • 两种方式都可以,可以在数据帧上进行,也可以将表注册为df.createOrReplaceTempView("tableName") 并用作spark.sql("SELECT * From tableName")df.sqlContext.sql("SELECT * From tableName")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2021-01-02
    • 1970-01-01
    相关资源
    最近更新 更多