【发布时间】:2021-11-03 17:18:02
【问题描述】:
我在表格中有以下信息
| equipment | run | runend | failure | removal_date |
| A | 1 | 1/1/2021 | 0 | 4/1/2021 |
| A | 2 | 2/1/2021 | 0 | 4/1/2021 |
| A | 3 | 3/1/2021 | 0 | 4/1/2021 |
| A | 4 | 4/1/2021 | 1 | 4/1/2021 |
| A | 5 | 4/1/2021 | 0 | 20/1/2021 |
| A | 6 | 10/1/2021 | 0 | 20/1/2021 |
我想创建一个额外的列来倒计时到故障点,所以看起来像这样:
| equipment | run | runend | failure | removal_date | RUL |
| A | 1 | 1/1/2021 | 0 | 4/1/2021 | 3 |
| A | 2 | 2/1/2021 | 0 | 4/1/2021 | 2 |
| A | 3 | 3/1/2021 | 0 | 4/1/2021 | 1 |
| A | 4 | 4/1/2021 | 1 | 4/1/2021 | 0 |
| A | 5 | 4/1/2021 | 0 | 20/1/2021 | 16 |
| A | 6 | 10/1/2021 | 0 | 20/1/2021 | 10 |
所以基本上是一个计数,每行都被计数到最接近表中显示的removing_date的runend。
我认为这可以使用窗口函数来实现,并且我设法添加了一个列来计算设备的所有行,但我一直坚持如何缩小这个窗口,然后计算第一个row 实际上取最后一个计数并向后工作。这是我目前所拥有的:
w = Window.partitionBy("equipment", "run").orderBy(asc("runend"))
df = df.withColumn("rank", rank().over(w))
# Just to see what the df looks like
df.where(col("equipment") == "A").groupby("equipment", "run", "rank", "failure", "runend", "removal_date").count().orderBy("equipment", "runend").show()
所以我得到了一个看起来像这样的表,我认为我在正确的轨道上,但仍然缺少一些部分
| equipment | run | runend | failure | removal_date | rank|
| A | 1 | 1/1/2021 | 0 | 4/1/2021 | 1 |
| A | 2 | 2/1/2021 | 0 | 4/1/2021 | 2 |
| A | 3 | 3/1/2021 | 0 | 4/1/2021 | 3 |
| A | 4 | 4/1/2021 | 1 | 4/1/2021 | 4 |
| A | 5 | 4/1/2021 | 0 | 20/1/2021 | 5 |
| A | 6 | 10/1/2021 | 0 | 20/1/2021 | 6 |
【问题讨论】:
-
这是复制粘贴的错别字。我会正确更新表格
-
您要计算
RUL列吗?因为在您的示例中,该列似乎是runend和removal_date列之间的天数差异。 -
是的,你是对的,我把问题复杂化了!
标签: apache-spark hadoop pyspark