В чем разница между выполнением необработанных запросов и запросов spark sql?

#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, а затем получаете готовый результат, поэтому:

  1. Это больше зависит от задачи, иногда это оправдано, иногда нет — например, создайте соединение для данных из hive и postgre
  2. Здесь ничего нет, вам нужно загружать таблицы отдельно (select * from tb), и только затем выполнять операции с ними, используя методы pyspark
  3. В вашем примере все, что делает pyspark, это чтение, у него разные инструкции, вы дали все инструкции postgre, где они были выполнены. Будет ли это быстрее? — опять же, все зависит от задачи, данных и других факторов. Вы можете попробовать пункт 2 и измерить время — если структура данных проста, то я думаю, что на postgre это будет быстрее