如何在某些情况下从Spark数据框中获取几行

Divas Nikhra

我有下面的三列数据框

id|visit_class|in_date 
+--+-----------+--------
|1|Non Hf     |24-SEP-2017
|1|Non Hf     |23-SEP-2017
|1|Hf         |27-SEP-2017
|1|Non Hf     |28-SEP-2017
|2|Non Hf     |24-SEP-2017
|2|Hf         |25-SEP-2017

我想将此数据帧在id上分组,然后在indate列上对分组的数据进行排序,并且只希望第一次出现HF之后出现的那些行。输出将如下所示。意味着前2行将在id = 1时删除,而前1行将在id = 2时删除。

id|visit_class|in_date 
+--+-----------+--------
|1|Hf         |27-SEP-2017
|1|Non Hf     |28-SEP-2017
|2|Hf         |25-SEP-2017

我将如何在Spark和Scala中实现这一目标。

智慧

步骤

1)创建WindowSpec,排序依据date和分区依据id

2)创建一个累积总和以指示是否Hf出现,然后根据条件进行过滤:

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

val w = Window.partitionBy("id").orderBy(to_date($"in_date", "dd-MMM-yyyy"))
(df.withColumn("rn", sum(when($"visit_class" === "Hf", 1).otherwise(0)).over(w))
   .filter($"rn" >= 1).drop("rn").show)

+---+-----------+-----------+
| id|visit_class|    in_date|
+---+-----------+-----------+    
|  1|         Hf|27-SEP-2017|
|  1|     Non Hf|28-SEP-2017|
|  2|         Hf|25-SEP-2017|
+---+-----------+-----------+

使用spark 2.2.0to_date并带有格式签名是2.2.0中的新功能


如果您使用的是spark <2.2.0,则可以unix_timestamp代替使用to_date

val w = Window.partitionBy("id").orderBy(unix_timestamp($"in_date", "dd-MMM-yyyy"))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在某些情况下如何重命名熊猫数据框中的列值

如何在不连接的情况下读取Python数据框中的数据?

如何在不刷新页面的情况下基于选择框值从Codeigniter中的数据库中获取值?

如何在不分组的情况下串联熊猫中数据框的所有行

如何在不轮询的情况下获取数据?

如何在不更改顺序的情况下逐行读取数据帧?在Spark Scala中

如何在保留最新数据的情况下从Spark数据框中删除重复项?

在不计数的情况下获取Spark数据框中的行数

在给定某些约束的情况下,如何使用Python浏览目录中的文件并输出熊猫数据框?

在某些情况下拆分数据框

如何在不使用全局变量的情况下从回调中获取数据?

如何在没有for循环的情况下从不同的数据帧中获取值?

如何在不循环的情况下替换数据框中每个单元格的值

如何在不使用for循环的情况下替换数据框中的某些行

我如何在Flutter中没有密钥的情况下获取JSON数据?

在某些情况下如何在Spark DataFrame中创建新列“ count”

如何在不执行mysql db query的情况下从缓存中获取数据

如何在不使用提交按钮的情况下从多个下拉列表中获取数据

如何在不删除C#中的当前数据的情况下从富文本框中编辑数据

双击datagridview行后如何在不使用属性的情况下从数据表中获取行的列值到文本框

如何在给定数据框中的值或索引列表的情况下屏蔽数据框

如何在不按本机反应的情况下从异步存储中获取数据

如何在不重新分配的情况下修改嵌套在列表中的数据框

如何在不写入文件的情况下从数据框中获取 HTML?

如何在不创建新列的情况下增加数据框中的值?

如何在不循环的情况下获取对象中的数据

如何在不遍历行的情况下丢弃 Pandas 数据框中的异常值?

如何在不更改格式的情况下从稀疏数据框中删除行

如何在不覆盖的情况下替换 R 数据框中的值?