который быстрее spark.sql или df.filter (""). select (""). используя Scala - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть таблица в формате df, в которой также есть представление, созданное с помощью

table.createOrReplaceTempView("table")

и запрос

spark.sql("SELECT column1 from TABLE where column2 = 'VALUE'")

я хочу переписать запрос как

TABLE.filter(TABLE("column2") === "value").select(col("column1"))

так какой запрос намного быстрее обычного spark.sql или с фильтром и выберите? при использовании больших наборов данных.

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Зависит от вашего варианта использования, просто попробуйте оба, которые работают быстро, это лучший вариант для вас!

Я бы порекомендовал вам использовать

1.spark.time(df.filter(“”).select(“”)) 

2.spark.time(spark.sql("")) 

вы можете распечатать время и использовать тот, который занимает меньше времени для выполнения в вашем коде, чтобы выполнить его быстрее.

0 голосов
/ 13 сентября 2018

Я предполагаю, что если их физический план выполнения точно такой же, производительность будет такой же. Итак, давайте проведем тест на Spark 2.2.0:

scala> import spark.implicits._
import spark.implicits._

scala> case class Record(column1: String, column2: String)
defined class Record

scala> val table = List(Record("foo", "value"), Record("bar", "notvalue")).toDF
table: org.apache.spark.sql.DataFrame = [column1: string, column2: string]

scala> table.createOrReplaceTempView("table")

scala> val a = spark.sql("SELECT column1 from TABLE where column2 = 'value'")
a: org.apache.spark.sql.DataFrame = [column1: string]

scala> val b = table.filter(table("column2") === "value").select(col("column1")) 
b: org.apache.spark.sql.DataFrame = [column1: string]

scala> a.explain()
== Physical Plan ==
*Project [column1#41]
+- *Filter (isnotnull(column2#42) && (column2#42 = value))
   +- LocalTableScan [column1#41, column2#42]

scala> b.explain()
== Physical Plan ==
*Project [column1#41]
+- *Filter (isnotnull(column2#42) && (column2#42 = value))
   +- LocalTableScan [column1#41, column2#42]

Похоже, что нет никакой разницы ...

0 голосов
/ 07 сентября 2018

Я могу ошибаться, но это точно так же. Spark собирается прочитать оба кода, интерпретировать их через Catalyst и сгенерировать RDD-код с помощью оптимизации вольфрама.

Основным изменением является простота кодирования и отладки. С spark.sql у вас не будет никакой информации во время компиляции об ошибках или ошибках типа ...

А с помощью .filter, .select гораздо проще делать отступы, читать и т. Д ...

TLDR: производительность = одинаковая / кодирование = spark.sql намного хуже

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