Примените groupBy и orderBy к кадру данных в Scala - PullRequest
0 голосов
/ 11 октября 2019

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

Данные в кадре данных такие, как показано ниже.

+------------+---------+-----+
|      NUM_ID|    TIME |SIG_V|
+------------+---------+-----+
|XXXXX01     |167499000|55   |
|XXXXX02     |167499000|     |
|XXXXX01     |167503000|     |
|XXXXX02     |179810000| 81.0|
|XXXXX02     |179811000| 81.0|
|XXXXX01     |179833000|     |
|XXXXX02     |179833000|     |
|XXXXX02     |179841000| 81.0|
|XXXXX01     |179841000|     |
|XXXXX02     |179842000| 81.0|
|XXXXX03     |179843000| 87.0|
|XXXXX02     |179849000|     |
|XXXXX02     |179850000|     |
|XXXXX01     |179850000| 88.0|
|XXXXX01     |179857000|     |
|XXXXX01     |179858000|     |
|XXXXX01     |179865000|     |
|XXXXX03     |179865000|     |
|XXXXX02     |179870000|     |
|XXXXX02     |179871000| 11  |
+--------------------+-------+

Указанные выше данные уже упорядочены ВРЕМЯ столбец.

Мое требование - сгруппировать столбец NUM_ID , как показано ниже.

+------------+---------+-----+
|      NUM_ID|    TIME |SIG_V|
+------------+---------+-----+
|XXXXX01     |167499000|55   |
|XXXXX01     |167503000|     |
|XXXXX01     |179833000|     |
|XXXXX01     |179841000|     |
|XXXXX01     |179850000| 88.0|
|XXXXX01     |179857000|     |
|XXXXX01     |179858000|     |
|XXXXX01     |179865000|     |
|XXXXX02     |167499000|     |
|XXXXX02     |179810000| 81.0|
|XXXXX02     |179811000| 81.0|
|XXXXX02     |179833000|     |
|XXXXX02     |179841000| 81.0|
|XXXXX02     |179849000|     |
|XXXXX02     |179850000|     |
|XXXXX02     |179842000| 81.0|
|XXXXX02     |179870000|     |
|XXXXX02     |179871000| 11  |
|XXXXX03     |179843000| 87.0|
|XXXXX03     |179865000|     |
+--------------------+-------+

Столбец NUM_ID теперь сгруппирован, и столбец ВРЕМЯ находится в отсортированном порядке для каждого NUM_ID .

Я попытался применить groupBy и orderBy к кадру данных, который не работает.

val df2 =  df1.withColumn("SIG_V", col("SIG")).orderBy("TIME").groupBy("NUM_ID")

и получение ошибки при df2.show

error: value orderBy is not a member of org.apache.spark.sql.RelationalGroupedDataset

Есть ли какие-либо сведения для получения требования?

1 Ответ

5 голосов
/ 11 октября 2019

Вам не нужно groupBy, просто поместите два столбца в orderBy:

scala> df.show()
+---+---+
| _1| _2|
+---+---+
|  1|  3|
|  2|  2|
|  1|  4|
|  1|  1|
|  2|  0|
|  1| 10|
|  2|  5|
+---+---+


scala> df.orderBy('_1,'_2).show()
+---+---+
| _1| _2|
+---+---+
|  1|  1|
|  1|  3|
|  1|  4|
|  1| 10|
|  2|  0|
|  2|  2|
|  2|  5|
+---+---+
...