Spark DataFrameWriter использует TIMESTAMP вместо DATETIME - PullRequest
0 голосов
/ 21 февраля 2019

Я переношу свою базу данных с SQL Server на MariaDB, но у меня возникают проблемы с ограничением диапазона TIMESTAMP для MariaDB.

У меня есть проект PySpark, который заполняет базу данных, создавая таблицы с использованием DataFrameWriter.jdbc () в режиме перезаписи.При работе с SQL Server Spark превращает свой собственный тип данных Timestamp в тип данных SQL Server DATETIME2, который прекрасно работает.Однако при работе с MariaDB он превращается в собственный TIMESTAMP для MariaDB, диапазон которого заканчивается в 2038 году. Это создает проблемы для всех таблиц, содержащих значения, превышающие это.

Я знаю, что MariaDB имееттип DATETIME, который имеет тот же диапазон, что и DATETIME SQL Server, но я не могу найти способ заставить Spark использовать этот тип данных при создании таблицы.

Я также не могу создать таблицу вручнуюпотому что он должен воссоздаваться каждый раз, когда запускаются мои скрипты.

1 Ответ

0 голосов
/ 17 июля 2019

Я также столкнулся с той же проблемой, когда попытался вместо непосредственного использования spark.read/write с jdbc установить соединение с помощью пакета mysql.connection.Вот взгляд:

!pip install mysql.connector
import mysql.connector
conn = mysql.connector.connect(host="localhost",port=3306, user="root", password="yourpassword", database="xyz")
cursor = conn.cursor()
Qry = "create table TempTableMaria (colA VARCHAR(50), startdate datetime(6), enddate datetime(6), colB VARCHAR(50));"
cursor.execute(Qry)
conn.commit()
conn.close()

Вы можете передать запрос на создание таблицы cutomized, где вы можете указать столбцы и их тип данных в соответствии с требованиями и создать пустую таблицу с требуемой схемой.

Один развы сделали свою работу, вы всегда можете удалить таблицу, если вам это нужно.

Для остальных операций, таких как добавление / перезапись этой таблицы, вы всегда можете вернуться к df.write.format ("jdbc ") .... Когда вы пишете в эту таблицу сейчас, ваш тип данных метки времени будет храниться как datetime, и никаких проблем не возникнет, если ваш столбец содержит дату 9999-12-31 00: 00: 00.000000

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...