Комментарии 4

В упомянутом low-code решении Datagram SQL-запросы трансформируются в scala-код с использованием Spark SQL


spark.sql("SELECT * FROM people WHERE age > 30 ")

или методов класса DataFrame


people.filter("age > 30")

?

В Datagram есть несколько видов трансформаций которые можно использовать из визуального редактора, один из видов это блок SparkSQL, который преобразуется в код Scala выдающий на выходе DataSet:
...
val queryResult = spark.sql("SELECT * FROM people WHERE age > 30 ")
queryResult.as[mainSparkSQLSchema] 

Также есть специализированные визуальные блоки, которые преобразуются в нотацию DataFrame API (фильты, join, группировки, и т.д.)
image
преобразуется в код

def getSelectionFilter(spark: SparkSession, Expression_3: Dataset[Expression_3Schema]) = {
    import spark.implicits._
       
    Expression_3.filter(s"""age>30""")
  }

  def getAggregationDM(spark: SparkSession, SelectionFilter: Dataset[Expression_3Schema]) = {
    import spark.implicits._
        SelectionFilter
             .groupBy("id").agg($"id")
    .as[AggregationDMSchema]  
  }

Не проводили сравнение, какой из вариантов производительнее?

Фактически разницы может и не быть. Оба подхода сводятся к использованию оптимизатора Catalyst. Использование DataFrame API позволяет отловить некоторые ошибки на этапе компиляции, а ошибку в запросе SQL мы увидим только во время выполнения.
Вот статья, в которой производится сравнение: https://community.cloudera.com/t5/Community-Articles/Spark-RDDs-vs-DataFrames-vs-SparkSQL/ta-p/246547
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.
Информация
Дата основания

21 марта 2005

Местоположение

Россия

Численность

201–500 человек

Дата регистрации

20 апреля 2018

Блог на Хабре