Spark SQL, czy jest różnica w wydajności podczas wykonania zapytania SQL a wykorzystania API DataFrame/DataSet?

Spark SQL, czy jest różnica w wydajności podczas wykonania zapytania SQL a wykorzystania API DataFrame/DataSet?

Nie ma różnicy w wydajności między tymi dwoma metodami.

Rozważmy dwie metody odczytu danych z tej samej tabeli Hive. W obu przypadkach plan wykonania będzie taki sam, ponieważ w obu przypadkach użoty optymalizatora Catalyst oraz silnika Tangsten, który jest dostępny od Sparka 2.0 (Tangsten). W przyszłości przygotuję posty na temat Catalyst’a i Tangsten’a, aby przybliżyć Ci ich działanie.

val testDataSetDF = spark.sqlContext.table("bigdata_etl.some_dataset").withColumn("age_label", when($"age" = 30, "thirty-year-old person").otherwise("Other"))
val testDataSetDF = spark.sqlContext.sql("SELECT *, CASE WHEN age = 30 THEN 'thirty-year-old person' ELSE 'Other' END age_label FROM bigdata_etl.some_dataset")

Różnica jest tylko w składni. Wybierz tą, która jest Ci bliższa. Osobiście uważam, że powinno się korzystać z pierwszej wersji. Druga opcja z pisaniem zapytania SQL ma tą zaletę, że możemy w zapytaniu odnosić się do tabel tymczasowych (temporary tables).

// Referencja do tabeli tymczasowej
val testDataSetDF = spark.sqlContext.table("bigdata_etl.some_dataset").withColumn("age_label", when($"age" = 30, "thirty-year-old person").otherwise("Other"))
testDataSetDF.createOrReplaceTempView("someDataSetTempView")
val only30thPersons = spark.sqlContext.sql("SELECT * FROM someDataSetTempView where age_label = 'thirty-year-old person'")

Jeśli spodobał Ci się ten post to napisz proszę komentarz poniżej oraz udostępnij ten post na swoim Facebook’u, Twitter’ze, LinkedIn lub innej stronie z mediami społecznościowymi.
Z góry dzięki!

Leave a Reply

avatar
  Subscribe  
Powiadom o
Close Menu