【发布时间】:2021-06-11 11:17:41
【问题描述】:
所以我有一张来自工厂时间序列传感器数据的表格。其中一个传感器负责处理传送带上的原始产品在加工到炼油厂之前的移动(电压/重量秤)。每当 24 小时内的 delta(皮带电压低于或高于正常值/皮带上的重量(每秒得出)低于或高于目标值时(目标 ÷ 86,400 秒) 〜四舍五入到最接近的吨,没有小数)我们将其捕获为新的事件触发器并在我们的仓库数据库中行并移动到数据湖中 我们需要通过工作班次(白班/重班)来找到跨越班次时间的时间段的效率
考虑到 2400 吨的目标,在早上 5:00 到下午 5:00 之间的正常日班和夜班反之亦然,我们需要以下数据框:
开始数据帧
| row # | event_start | event_end | operation_status | tons_actual | tons_target | comment |
|---|---|---|---|---|---|---|
| 1 | 2021-02-01 7:00 AM | 2021-02-01 9:00 AM | normal_run | 197 | 200 | |
| 2 | 2021-02-01 9:00 AM | 2021-02-01 7:00 PM | curtailed | 700 | 1004 | shift split here |
| 3 | 2021-02-01 7:00 PM | 2021-02-01 11:00 PM | down_for_maintenance | 0 | 301 | |
| 4 | 2021-02-01 11:00 PM | 2021-02-02 3:00 AM | curtailed | 320 | 402 | |
| 5 | 2021-02-02 3:00 AM | 2021-02-02 8:00 AM | over_producing | 600 | 502 | shift split here |
| 6 | 2021-02-02 8:00 AM | 2021-02-02 11:00 AM | normal_run | 280 | 301 | |
| 7 | 2021-02-02 11:00 AM | 2021-02-04 4:00 PM | broken_belt_unscheduled_loss | 0 | 5323 | multiple shift splits here |
像这样在换班时间拆分行:
目标数据帧
| row # | event_start | event_end | operation_status | tons_actual | tons_target | -------- |
|---|---|---|---|---|---|---|
| 1 | 2021-02-01 7:00 AM | 2021-02-01 9:00 AM | normal_run | 197 | 200 | |
| 2.1 | 2021-02-01 9:00 AM | 2021-02-01 5:00 PM | curtailed | 560 | 804 | grave shift split |
| 2.2 | 2021-02-01 5:00 PM | 2021-02-01 7:00 PM | curtailed | 140 | 201 | grave shift split |
| 3 | 2021-02-01 7:00 PM | 2021-02-01 11:00 PM | down_for_maintenance | 0 | 302 | |
| 4 | 2021-02-01 11:00 PM | 2021-02-02 3:00 AM | curtailed | 320 | 402 | |
| 5.1 | 2021-02-02 3:00 AM | 2021-02-02 5:00 AM | over_producing | 240 | 200 | day shift split |
| 5.2 | 2021-02-02 5:00 AM | 2021-02-02 8:00 AM | over_producing | 360 | 302 | day shift split |
| 6 | 2021-02-02 8:00 AM | 2021-02-02 11:00 AM | normal_run | 280 | 301 | |
| 7.1 | 2021-02-02 11:00 AM | 2021-02-02 5:00 PM | broken_belt_unscheduled_loss | 0 | 602 | shift split |
| 7.2 | 2021-02-02 5:00 PM | 2021-02-03 5:00 AM | broken_belt_unscheduled_loss | 0 | 1205 | shift split |
| 7.3 | 2021-02-03 5:00 AM | 2021-02-03 5:00 PM | broken_belt_unscheduled_loss | 0 | 1205 | shift split |
| 7.4 | 2021-02-03 5:00 PM | 2021-02-04 5:00 AM | broken_belt_unscheduled_loss | 0 | 1205 | shift split |
| 7.5 | 2021-02-03 5:00 AM | 2021-02-04 4:00 PM | broken_belt_unscheduled_loss | 0 | 1105 | shift split |
所以最终结果可以是每班df.groupby(sum : tons)
首先,我知道它需要某种数组在 F.explode() 函数中创建 UDF
【问题讨论】:
标签: python-3.x apache-spark pyspark apache-spark-sql