Apache Spark SQL a 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 (Apache Spark SQL a API DataFrame DataSet) .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 i Tangsten, 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'")