使用Scala过滤Spark中未激活的行

使用Scala过滤Spark中未激活的行,scala,dataframe,apache-spark,Scala,Dataframe,Apache Spark,我对Spark和Scala编程非常陌生,我有一个问题,希望一些聪明人能帮我解决。 我有一个名为users的表,它有4列:status、user\u id、name、date 行是: status user_id name date active 1 Peter 2020-01-01 active 2 John 2020-01-01 active 3 Alex 2020-01-01 inactive 1 Peter 2

我对Spark和Scala编程非常陌生,我有一个问题,希望一些聪明人能帮我解决。 我有一个名为users的表,它有4列:status、user\u id、name、date

行是:

status  user_id name    date
active      1   Peter   2020-01-01
active      2   John    2020-01-01
active      3   Alex    2020-01-01
inactive    1   Peter   2020-02-01
inactive    2   John    2020-01-01
我只需要选择活动用户。两名用户被灭活。只有一个在同一日期被灭活

我的目标是筛选非活动状态的行(我可以这样做),并在非活动行与活动行的列匹配时筛选非活动用户。彼得在不同的日期被灭活,他没有被过滤。预期结果将是:

1 Peter 2020-01-01
3 Alex 2020-01-01
已筛选非活动状态的行。John被禁用,因此他的行也被过滤

我最接近于筛选处于非活动状态的用户:

val users = spark.table("db.users")
      .filter(col("status").not Equal("Inactive"))
      .select("user_id", "name", "date")
有什么想法或建议如何解决这个问题?
谢谢

首先使用group by为每个用户和日期检查非活动,并将此结果加入原始df

val df2 = df.groupBy('user_id, 'date).agg(max('status).as("status"))
  .filter("status = 'inactive'")
  .withColumnRenamed("status", "inactive")

df.join(df2, Seq("user_id", "date"), "left")
  .filter('inactive.isNull)
  .select(df.columns.head, df.columns.tail: _*)
  .show()

+------+-------+-----+----------+
|status|user_id| name|      date|
+------+-------+-----+----------+
|active|      1|Peter|2020-01-01|
|active|      3| Alex|2020-01-01|
+------+-------+-----+----------+

同一日期发生更多事件?对于同一个用户,我很确定,
not
Equal
之间没有空格
notEqual
是函数。此外,在您提供的数据中,
inactive
不是以代码形式出现的。请先修复输入错误,以便我们了解是否存在实际的潜在问题是的,可以更多,但为了简化此过程,让我们假设行是不同的。我不允许以subumit形式输入notEqual。以我给出的代码为例没有问题,只是不完整。谢谢!解决方案很好。我一到15岁就会投票。