Данные не записываются в отсортированном формате на целевой таблице оракула через SPARK - PullRequest
0 голосов
/ 30 мая 2018

У меня есть таблица в улье с приведенной ниже схемой emp_id: int emp_name: string

Я создал фрейм данных из приведенной выше таблицы кустов

df = sql_context.sql('SELECT * FROM employee ORDER by emp_id')
df.show()

После запуска приведенного выше кода я вижу, чтоданные сортируются правильно в emp_id

Я пытаюсь записать данные в таблицу Oracle с помощью кода ниже

df.write.jdbc(url=url, table='target_table', properties=properties,  mode="overwrite")

Насколько я понимаю, это происходит из-за нескольких процессов-исполнителей, работающих нав то же время для каждого раздела данных и сортировки, применяемой с помощью запроса, применялись к конкретному разделу, и когда несколько процессов, записывающих данные в Oracle одновременно, искажали порядок таблицы результатов

Затем я попытался перераспределить данные толькоодин раздел (что не является идеальным решением) и пост-запись данных в oracle, сортировка работала правильно

Есть ли способ записи отсортированных данных в RDBMS из SPARK

1 Ответ

0 голосов
/ 30 мая 2018

TL; DR При работе с реляционными системами вы никогда не должны зависеть от порядка вставки.Spark здесь не совсем уместен.

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

Единственным исключением в Oracle являются Индексные организованные таблицы , где:

данные для организованной по индексу таблицы хранятся в структуре индекса B-дерева отсортированным по первичному ключу способом.

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

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