spark.read не является членом пакета org.apache.spark - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь подключить postgresql и спарк на Intellij. Однако я получаю ошибку object read is not a member of package org.apache.spark, хотя я включил драйвер JDBC в свой build.sbt.

Я пытаюсь следовать этому уроку https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html и вот мой код scala:

import org.apache.spark

object DBConn {

  def main(args: Array[String]): Unit = {

    // Note: JDBC loading and saving can be achieved via either the load/save or jdbc methods
    // Loading data from a JDBC source
    val jdbcDF = spark.read
      .format("jdbc")
      .option("url", "jdbc:postgresql://host/db")
      .option("dbtable", "chroniker_log")
      .option("user", "username")
      .option("password", "password")
      .load()

    val connectionProperties = new Properties()
    connectionProperties.put("user", "username")
    connectionProperties.put("password", "password")
    val jdbcDF2 = spark.read
      .jdbc("jdbc:postgresql:dbserver", "schema.tablename", connectionProperties)
    // Specifying the custom data types of the read schema
    connectionProperties.put("customSchema", "id DECIMAL(38, 0), name STRING")
    val jdbcDF3 = spark.read
      .jdbc("jdbc:postgresql:dbserver", "schema.tablename", connectionProperties)
  }
}

build.sbt:

name := "DBConnect"

version := "0.1"

scalaVersion := "2.11.12"

val sparkVersion = "2.4.3"

resolvers ++= Seq(
  "apache-snapshots" at "http://repository.apache.org/snapshots/"
)

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % sparkVersion,
  "org.postgresql" % "postgresql" % "42.2.5"
)

Я попытался упростить проблему, запустив spark-shell на консоли. Однако следующая команда также выдает то же предупреждение:

spark-shell --driver-class-path postgresql-42.2.5.jar --jars postgresql-42-2.5.jar -i src/main/scala/DBC
onn.scala

Интересно, когда я попал в spark-shell после сбоя вышеуказанного кода, он начинает распознавать spark.read и успешно подключается к базе данных.

1 Ответ

1 голос
/ 13 июня 2019

Вам нужен экземпляр SparkSession, который часто называют spark (включая оболочку искры).См. этот учебник :

val spark = SparkSession
  .builder()
  .appName("Spark SQL basic example")
  .config("spark.some.config.option", "some-value")
  .getOrCreate()

Так что read не метод в объекте пакета, а метод в классе SparkSession

...