【问题标题】:Read data from mysql in spark-shell在 spark-shell 中从 mysql 读取数据
【发布时间】:2018-03-13 08:51:56
【问题描述】:

首先我使用这行代码构建了 sbt scala 应用程序来从 apache spark 中的 mysql 表中读取数据。

val spark = SparkSession.builder().master("local").appName("Fuzzy Match Analysis").config("spark.sql.warehouse.dir","file:///tmp/spark-warehouse").getOrCreate()
import spark.implicits._
var df = spark.read.format("jdbc")
    .option("url", "jdbc:mysql://127.0.0.1:3306")
    .option("dbtable","(select * from engine.ecl limit 1) as onerow")
    .option("user", "root")
    .option("driver", "com.mysql.jdbc.Driver")
    .option("password", "root")
    .load()

现在我正在尝试使用相同的方法从 spark shell 中的 mysql 表中读取数据

scala> var df = spark.read.format("jdbc").option("url","jdbc:mysql://127.0.0.1:3306").option("user","root").option("password","root").option("driver","com.mysql.jdbc.Driver").option("dbtable","(select * from engine.ecl limit 1) as onerow")
df: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@22e253c7

但是当我尝试使用 df.show() 方法查看行中的内容时,它给了我以下错误。

scala> df.show()
<console>:26: error: value show is not a member of org.apache.spark.sql.DataFrameReader
       df.show()

我尝试通过添加这些行来解决依赖关系

\spark-2.2.0-bin-hadoop2.7\conf\spark-defaults.conf.template

spark.driver.extraClassPath = C:/Program Files/MySQL/mysql-connector-java-5.1.36.jar spark.executor.extraClassPath = C:/Program Files/MySQL/mysql-connector-java-5.1.36.jar

【问题讨论】:

  • 谢谢先生,但是还有两件事我应该在这里提到 1. 我添加了 spark.driver.extraClassPath = C:/Program Files/MySQL/mysql-connector-java-5.1.36.jar spark.executor.extraClassPath = C:/Program Files/MySQL/mysql-connector-java-5.1.36.jar spark-defauls.conf.template 文件,但我还需要将此文件重命名为 spark-defauls.conf 我也需要使用这一行创建类的新实例 Class.forName("com.mysql.jdbc.Driver").newInstance

标签: mysql apache-spark integration


【解决方案1】:

据我所知(也由 错误消息 指出),yourspark-shell 中的 var df 指的是 DataFrameReader 而不是 DataFrame,因为您没有t 调用了DataFrameReaderload() 方法。

df: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@22e253c7


作为一个好的做法,始终确保指定类型(即使Scala 自动推断它)以避免陷阱像这样。

【讨论】:

    【解决方案2】:

    要启动 mysql 集成 apache spark 我们需要按照以下步骤操作

    1. 要在 Apache Spark 中使用 MySQL 服务器,我们需要 Connector/J for MySQL。 下载mysql-connector-java-5.1.36,然后添加 conf/spark-defaults.conf 的类路径

      spark.driver.extraClassPath = C:/ProgramFiles/MySQL/mysql-connector-java-5.1.36.jar spark.executor.extraClassPath = C:/ProgramFiles/MySQL/mysql-connector-java-5.1.36.jar

    2. 你需要使用这个调用创建一个新的 jdbc 驱动实例

      Class.forName("com.mysql.jdbc.Driver").newInstance

    3. 使用documentation可以在spark-shell中调用mysql查询。

      val jdbcDF = spark.read.format("jdbc").options(Map("url" -> "jdbc:mysql://localhost:3306/engine?user=root&password=root","dbtable" -> "engine.ecl","fetchSize" -> "10")).load()

    1. var df = spark.read.format("jdbc").option("url","jdbc:mysql://127.0.0.1:3306").option("user","root").option ("password","root").option("driver","com.mysql.jdbc.Driver").option("dbtable","(select * from engine.ecl limit 1) as onerow").load ()

    【讨论】:

      猜你喜欢
      • 2016-05-05
      • 1970-01-01
      • 2015-11-11
      • 2019-09-08
      • 2015-08-27
      • 2021-11-11
      • 2021-10-26
      • 1970-01-01
      • 2017-07-14
      相关资源
      最近更新 更多