#apache-spark #pyspark #apache-spark-sql
#apache-spark #pyspark #apache-spark-sql
Вопрос:
Я начинаю склоняться spark
, и я увидел, что spark может запускать запросы на SQL ( postgres
в моем случае).
Я не понимаю, какие преимущества я могу получить при выполнении запросов из spark по сравнению с их выполнением через обычные запросы?
например:
В python я могу выполнить следующий необработанный запрос postgres:
connection = psycopg2.connect(user = "user",
password = "pass",
host = "127.0.0.1",
port = "5432",
database = "test_db")
cursor = connection.cursor()
cursor.execute("select t1.name, t2.value from table1 t1, table2 t2 where t1.id = t2.id and t2.value > 100")
И эквивалент в spark:
_select_sql = "select t1.name, t2.value from table1 t1, table2 t2 where t1.id = t2.id and t2.value > 100"
df_select = spark.read.jdbc(url=url,table=_select_sql,properties=db_properties)
- Итак, зачем использовать spark для выполнения SQL-запросов в SQL DB?
- Я читал, что spark может обрабатывать данные распределенным способом. Но как я могу увидеть улучшения здесь?
- В обоих случаях (необработанный запрос и запрос spark sql) будет ли запрос выполняться на сервере postgres DB? так что, если это так, производительность будет такой же?
Комментарии:
1. здесь нет никакого преимущества, но причина этого в том, что вы не продолжили обработку данных и, возможно, других данных через Spark после получения данных из базы данных Postgres. Я имею в виду, вся идея в том, что вы можете запрашивать разные источники данных из Spark, а затем в Spark что-то с этим делать.
Ответ №1:
Сначала вы запускаете запрос PostgreSQL через spark, а затем получаете готовый результат, поэтому:
- Это больше зависит от задачи, иногда это оправдано, иногда нет — например, создайте соединение для данных из hive и postgre
- Здесь ничего нет, вам нужно загружать таблицы отдельно (select * from tb), и только затем выполнять операции с ними, используя методы pyspark
- В вашем примере все, что делает pyspark, это чтение, у него разные инструкции, вы дали все инструкции postgre, где они были выполнены. Будет ли это быстрее? — опять же, все зависит от задачи, данных и других факторов. Вы можете попробовать пункт 2 и измерить время — если структура данных проста, то я думаю, что на postgre это будет быстрее