Почему spark медленнее по сравнению со sqoop, когда речь идет о jdbc?

Понятно, что при миграции/загрузке с oracle db на hdfs/parquet предпочтительно использовать SQOOP, а не SPARK с драйвером JDBC.

Spark должен быть в 100 раз быстрее при обработке, верно? А что не так со Спарком? Почему люди предпочитают SQOOP при загрузке данных из таблиц oracle db?

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
1
1 515
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Spark работает быстро, когда умеет распараллеливать запросы. Если вы просто выполняете один запрос, Spark не знает, что делать. Вы можете улучшить скорость, используя параметры lowerBound, upperBound, numPartitions при чтении данных с помощью spark.read.jdbc, но на самом деле это зависит от дизайна ваших таблиц.

Вы можете найти дополнительную документацию здесь.

Основная мысль уже освещена в ответе Алекса.

Я просто хотел добавить пример,

from pyspark.sql import SparkSession

spark = SparkSession.builder.master("local[4]").appName("Test-JDBC").getOrCreate()

ds = spark.read.jdbc("jdbc:mysql://localhost:3306/stackexchange", "(select min(id), max(id) from post_history) as ph",
                     properties = {"user": "devender", "password": "*****", "driver": "com.mysql.jdbc.Driver"})

r = ds.head()
minId = r[0]
maxId = r[1]

ds = spark.read.jdbc("jdbc:mysql://localhost:3306/stackexchange", "(select * from post_history) as ph",
                     properties = {"user": "devender", "password": "*****", "driver": "com.mysql.jdbc.Driver"},
                     numPartitions=4, column = "id", lowerBound=minId, upperBound=maxId)

count = ds.count()
print(count)

Для получения дополнительной информации https://gist.github.com/devender-yadav/5c4328918602b7910ba883e18b68fd87


Примечание. Sqoop автоматически выполняет граничный запрос для получения минимального и максимального значения для столбца разделить на (этот запрос также можно переопределить).

спасибо, но есть ли способ получить numPartitions динамически?

BdEngineer 28.05.2019 11:42

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

Dev 28.05.2019 13:20

Другие вопросы по теме