переписать функцию sql в чистую искру - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть код, который я пытаюсь оптимизировать, так как я хочу попробовать переписать SQL-код в чистый Spark, теперь у меня есть этот SQL-файл:

val df_result_week_agg = sparkSession.sqlContext.sql("SELECT group_id, client_id ,m_id ,min(date) stats_date ,sum(trans_cnt) trans_cnt,sum(revenue) revenue,count(DISTINCT id) cust_total, count(distinct returning_hash_id) loyal_cust_total ,'W' time_period  FROM customers  GROUP BY group_id, client_id , me_id, year(date),date_sub(to_date(date),date_format(to_date(date), 'u')-1)")

Есть ли какая-то статья или как это можнопомогите переписать это?Спасибо !

Ответы [ 2 ]

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

Вы можете использовать следующий синтаксис для использования

dbDf0.createOrReplaceTempView("name_for_Table_1");
dbDf0.cache();
dbDf0.count();

Теперь вы можете написать SQL поверх name_for_Table_1

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

Нет разницы в производительности между написанием SQL-запросов или написанием кода DataFrame, они оба «компилируются» в один и тот же базовый план, который мы указываем в коде DataFrame.

Оба метода используют один и тот же механизм выполнения и внутреннийструктуры данных.В конце дня все сводится к личным предпочтениям.

Для различных доступных функций в DataFrame обратитесь к: http://spark.apache.org/docs/2.2.1/api/python/pyspark.sql.html#pyspark.sql.DataFrame

В приведенном выше запросе, поскольку вы просто группируетеи агрегируя, вы можете использовать функцию groupBy DataFrame:

df.groupBy('group_id', 'client_id', 'me_id').agg({'date': 'min', 'trans_cnt': 'sum'})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...