【发布时间】:2018-08-27 03:20:26
【问题描述】:
一直在尝试将 Spark Dataframe 中的特定行推送到 Dataframe 的末尾。 这是我迄今为止尝试过的。
输入数据框:
+-------------+-------+------------+
|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 |
+-------------+-------+------------+
有没有更简单的方法来做到这一点?
【问题讨论】:
-
你的最终目标是什么?
-
@Assaf Mendelson :我需要找到一些用例的总数并在邮件中发布。总计必须在最后一行,这样才能使数据更有意义。我也编辑了这个问题 - 请注意。
-
看起来比实际上的答案简单。
-
如果您通过电子邮件发送,我认为结果相对较小。这意味着您以某种方式将其翻译为“电子邮件”(例如,通过收集)。为什么不在那里对最后一行进行排序(即在数据框之外)?
-
@AssafMendelson:错过了一点。实际上我不直接发送电子邮件。最终我将它写入HDFS。从那里,下游倾向于收集 part-00000 文件中的数据并通过电子邮件发送。无论我对你的第一个最终目标问题发表的评论都是高水平的。
标签: scala apache-spark apache-spark-sql