В блоках данных я пытаюсь записать фрейм данных в хранилище данных sql, используя JDBC-коннектор.Я не использую контейнер BLOB-объектов как промежуточное место во время чтения и записи.Таким образом, существует прямая связь между драйвером и sql-сервером.Код, который я использую:
table = 'SampleTableV2'
df1 = spark.createDataFrame([(1, 'Bilal', 'Shafqat'),
(2, 'Ali', 'Azam'),
(3, 'Hamdan', 'Sultan'),
(4, 'Faizan', 'Pathan'),
(5, 'Tehseen', 'Virk'),
(6, 'Shahzad', 'Badar')
], mySchema)
# Insert the rows into the Azure SQL table
df1.write \
.option('user', user) \
.option('password', pswd) \
.mode('append') \
.jdbc('jdbc:sqlserver://' + sqlserver + ':' + port + ';database=' + database, table)
Так что, если я сначала создаю таблицу на sql-сервере с помощью студии управления или консоли, а затем запускаю эту команду в записной книжке блоков данных, то эти данные добавляются в таблицу.Но если я пытаюсь использовать 'перезаписать' или если у меня уже нет таблицы в sql-сервере, и эта команда пытается создать и вставить, то это дает исключение, чем столбец 'FirstName' не может быть использован в качестве индекса columnstore.Я также заметил, что это обычно происходит для строковых столбцов, а не для столбцов типа int.Я также попытался настроить значение tableOptions, но не смог.
.option("tableOptions","heap,distribution=HASH([Id])")
Любая помощь будет высоко оценена.