Scala - Spark - Как я могу получить новый фрейм данных с разными значениями столбца фрейма данных и первой датой этого отдельного значения? - PullRequest
0 голосов
/ 02 октября 2018

У меня есть Spark Dataframe со следующей схемой:

________________________
|id   | no  | date      |
|1    | 123 |2018/10/01 |
|2    | 124 |2018/10/01 |
|3    | 123 |2018/09/28 |
|4    | 123 |2018/09/27 |

... Мне нужен новый DataFrame со следующими данными:

___________________
| no  | date      |
| 123 |2018/09/27 |
| 124 |2018/10/01 |

Может кто-топомогите мне в этом? :) Спасибо !!

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Вы можете решить эту проблему, используя ранг (https://databricks.com/blog/2015/07/15/introducing-window-functions-in-spark-sql.html) на фрейме данных с искрой sql:

, используйте registerTempTable на sparkContext, например df_temp_table

Makeэтот запрос:

    select dftt.*,  
    dense_rank() OVER ( PARTITION BY dftt.no ORDER BY dftt.date DESC) AS Rank from 
    df_temp_table as dftt

вы получите этот фрейм данных:

|id | no | date       | rank 
|1  | 123 |2018/10/01 | 1
|2  | 124 |2018/10/01 | 1
|3  | 123 |2018/09/28 | 2
|4  | 123 |2018/09/27 | 3 

на этом df вы можете теперь отфильтровать столбец ранга по 1

0 голосов
/ 02 октября 2018

Добро пожаловать,

Вы можете попробовать ниже Код:

import org.apache.spark.sql.functions.row_number
import org.apache.spark.sql.expressions.Window

val w = Window.partitionBy($"no").orderBy($"date".asc)
val Resultdf = df.withColumn("rownum", row_number.over(w))
     .where($"rownum" === 1).drop("rownum","id")

Resultdf.show()

Выход:

+---+----------+
| no|      date|
+---+----------+
|124|2018/10/01|
|123|2018/09/27|
+---+----------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...