Spark Dataframe - выдвигать конкретную строку к последней в Dataframe. - PullRequest
0 голосов
/ 27 августа 2018

Попытка выдвинуть определенную строку в кадре данных Spark в конец кадра данных.Это то, что я пробовал до сих пор.

Входной кадр данных:

+-------------+-------+------------+
|expected_date|count  |Downstream  |
+-------------+-------+------------+
|2018-08-26   |1      |abc         |
|2018-08-26   |6      |Grand Total |
|2018-08-26   |3      |xyy         |
|2018-08-26   |2      |xxx         |
+-------------+-------+------------+

Код:

    df.withColumn("Downstream_Hierarchy", when(col("Downstream") === "Grand Total", 2)
    .otherwise(1))
    .orderBy(col("Downstream_Hierarchy").asc)
    .drop("Downstream_Hierarchy")

Выходной кадр данных:

+-------------+-------+------------+
|expected_date|count  |Downstream  |
+-------------+-------+------------+
|2018-08-26   |1      |abc         |
|2018-08-26   |3      |xyy         |
|2018-08-26   |2      |xxx         |
|2018-08-26   |6      |Grand Total |
+-------------+-------+------------+

Есть ли более простой способ сделать это?

Ответы [ 3 ]

0 голосов
/ 27 августа 2018

Вы можете попробовать ниже простые шаги.

val lastRowDf = df.filter("Downstream='Grand Total'")
val remainDf = df.filter("Downstream !='Grand Total'")

remainDf.unionAll(lastRowDf).show
0 голосов
/ 27 августа 2018

Просматривая ваши комментарии, поскольку в HDFS нужен конечный результат, вы можете записать его как csv в HDFS дважды

Первый раз записать фрейм данных в hdf без строки «Grand Total».2-й раз напишите только строку «Общий итог» с режимом сохранения как «дописать».

0 голосов
/ 27 августа 2018

Фрейм данных, за исключением требуемой строки:

val df1 = df.filter(col("Downstream") =!= "Grand Total" )

Фрейм данных с необходимой строкой:

val df2 = df.filter(col("Downstream") === "Grand Total" )

Требуемый фрейм данных:

val df_final = df1.union(df2)

Не может бытьлучшее решение, но оно позволяет избежать дорогостоящих операций OrderBy .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...