2016-11-26 8 views
3

Я новичок в искре, и я пытаюсь сделать запрос, чтобы я мог получить самые посещаемые веб-страницы.Spark request max count

Мой запрос следующий

mostPopularWebPageDF = logDF.groupBy("webPage").agg(functions.count("webPage").alias("cntWebPage")).agg(functions.max("cntWebPage")).show() 

С этой просьбой я получить только dataframe с максимальным кол, но я хочу, чтобы извлечь dataframe с этим счетом и веб-страницы, которая содержит этот счет

Что-то вроде этого:

webPage   max(cntWebPage) 
google.com   2 

Как я могу исправить свою проблему?

Большое спасибо.

ответ

2

В pyspark + SQL:

logDF.registerTempTable("logDF") 

mostPopularWebPageDF = sqlContext.sql("""select webPage, cntWebPage from (
              select webPage, count(*) as cntWebPage, max(count(*)) over() as maxcnt 
              from logDF 
              group by webPage) as tmp 
              where tmp.cntWebPage = tmp.maxcnt""") 

Может быть, я могу сделать это чище, но это работает. Я постараюсь его оптимизировать.

Мой результат:

webPage  cntWebPage 
google.com 2 

для набора данных:

webPage usersid 
google.com 1 
google.com 3 
bing.com 10 

Пояснение: нормальный подсчет осуществляется с помощью группировки + кол-функции (*). Макс всех этих подсчетов рассчитываются с помощью оконной функции, поэтому для набора данных выше, немедленное DataFrame/без падения MAXCOUNT колонка/является:

webPage count maxCount 
google.com 2  2 
bing.com 1  2 

Затем мы выбираем строки с кол равным MAXCOUNT

EDIT: У меня есть удаленная версия DSL - она ​​не поддерживает window over(), и упорядочение меняет результат. Извините за эту ошибку. SQL-версия верна

+0

Большое спасибо за вашу помощь :) – JackR

+0

@JackR, если это вам помогло, пожалуйста, поднимитесь + отметьте как принято :) –

+0

Я голосую за это, потому что OP кажется невежественным о том, как идут дела. :) – eliasah

 Смежные вопросы

  • Нет связанных вопросов^_^