我有数据框,我希望通过PDP列中的最后一次出现值Good
来修剪它。这是考虑第5行及以下。第5行以上的任何内容都无关紧要。
+------+----+
|custId| PDP|
| 1001| New|
| 1002|Good|
| 1003| New|
| 1004| New|
| 1005|Good|
| 1006| New|
| 1007| New|
| 1008| New|
| 1009| New|
+------+----+
我需要的是这个数据帧。自上次Good
行动发生在第5行
+------+----+
|custId| PDP|
| 1001| New|
| 1002|Good|
| 1003| New|
| 1004| New|
| 1005|Good|
+------+----+
答案 0 :(得分:0)
您可以尝试:
df
.filter($"PDP" === "Good") // Filter good
.select(max("custId").alias("maxId")) // Find max id
.crossJoin(df)
.where($"custId" <= $"maxId") // Filter records with id <= lastGoodId
.drop("maxId") // Remove obsolete column
答案 1 :(得分:0)
您必须在<script src="{{ mix('js/app.js') }}"></script>
列中找到包含Good
的最后一行索引,然后仅过滤小于该索引的行。
如果您的PDP
列按排序顺序包含增加的ID,则可以执行以下操作
custId
如果您的import org.apache.spark.sql.functions._
val maxIdToFilter = df.filter(lower(col("PDP")) === "good").select(max(col("custId").cast("long"))).first().getLong(0)
df.filter(col("custId") <= maxIdToFilter).show(false)
没有排序并增加订单,那么您可以使用以下逻辑
custId
我希望答案很有帮助