Невозможно подключиться к MS SQL из Apache Spark с помощью pyspark на ноутбуке Jupyter - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь загрузить данные с сервера MS SQL, используя pyspark в Jupyter Notebook. Spark протестирован и работает нормально. Я использую следующее:

from pyspark import SparkContext, SparkConf, SQLContext

appName = "PySpark SQL Server Example - via JDBC"
master = "local"
conf = SparkConf() \
    .setAppName(appName) \
    .setMaster(master) \
    .set("spark.driver.extraClassPath","mssql-jdbc-7.4.1.jre8.jar")
sc = SparkContext.getOrCreate(conf=conf)
sqlContext = SQLContext(sc)
spark = sqlContext.sparkSession

# Loading data from a JDBC source
jdbcDF = spark.read \
    .format("jdbc") \
    .option("url", "jdbc:postgresql:dbserver") \
    .option("url", "jdbc:sqlserver://188.188.188.188:10004;databaseName=dbnme") \
    .option("dbtable", "dbo.tablename") \
    .option("user", "usernmame") \
    .option("password", "pawwrod") \
    .load()

Мой jar-файл MS SQL (mssql-jdbc-7.4.1.jre8.jar) находится в том же месте, где находится мой скрипт на python.

Полученные ошибки:

enter image description here

и:

enter image description here

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Я использую Apache Spark 2.4.4 с Hadoop 2.7 и выше. Вот код, который работал для меня в конце:

from pyspark import SparkContext, SparkConf, SQLContext

appName = "PySpark SQL Server Example - via JDBC"
master = "local"
conf = SparkConf() \
    .setAppName(appName) \
    .setMaster(master) \
    .set("spark.driver.extraClassPath","mssql-jdbc-7.4.1.jre8.jar")
sc = SparkContext.getOrCreate(conf=conf)
sqlContext = SQLContext(sc)
spark = sqlContext.sparkSession

hostname = "localhost"
database = "HumanResources"
port = "1433"
table = "dbo.Employee"
user = "sa"
password  = "Dedo9090"

jdbcDF = spark.read.format("jdbc") \
    .option("url", f"jdbc:sqlserver://ILI-LAB-HRVOJE;databaseName={database}") \
    .option("dbtable", table) \
    .option("user", user) \
    .option("password", password) \
    .load()

jdbcDF.head(50)

Если у вас все еще есть проблемы с доступом к серверу SQL, убедитесь, что TCP / IP включен, как предложено здесь , а также убедитесь, чтоВаш брандмауэр не блокирует доступ к порту 1433, который прослушивает сервер MS SQL. В конце концов, речь не шла о неподдерживаемых символах в пароле.

0 голосов
/ 18 октября 2019

РЕДАКТИРОВАТЬ :

Проверьте эту ссылку: Символы, которые не допускаются в имени таблицы и имени столбца на сервере sql?

Theпервый символ должен быть одним из следующих:

  • Буква в соответствии со стандартом Unicode 3.2. Определение букв Unicode включает латинские символы от a до z, от A до Z, а также буквенные символы из других языков.

  • Подчеркивание (_), знак (@),или знак числа (#).

Последующие символы могут включать следующее:

  • Буквы, как определено в стандарте Unicode 3.2.

  • Десятичные числа из основного латинского алфавита или других национальных алфавитов.

  • Знак at, знак доллара ($), знак числа или подчеркивание.

Пожалуйста, попробуйте использовать эту функцию, которую я сделал для подключения к базам данных SQL ( он имеет драйвер как часть свойств подключения и загружает драйвер во время выполнения ):

def connect_to_sql(
    spark, jdbc_hostname, jdbc_port, database, data_table, username, password
):
    jdbc_url = "jdbc:sqlserver://{0}:{1}/{2}".format(jdbc_hostname, jdbc_port, database)

    connection_details = {
        "user": username,
        "password": password,
        "driver": "com.microsoft.sqlserver.jdbc.SQLServerDriver",
    }

    df = spark.read.jdbc(url=jdbc_url, table=data_table, properties=connection_details)
    return df

Просто передайте необходимые аргументы, и все должно заработать. Дайте мне знать, если это не так, я внесу необходимые изменения.

...