我是 Spark 新手,面临着一个我几天来一直在努力解决的问题。我还没有找到解决方案。 Spark Java 或 Scala 中的答案将不胜感激。我的数据集如下所示。
实例 | 时间 | 电源 |
---|---|---|
I1 | 2024-09-01-00:00:00 | 电力 |
I1 | 2024-09-01-00:15:00 | 错误 |
I1 | 2024-09-01-00:30:00 | 错误 |
I1 | 2024-09-01-00:45:00 | 错误 |
I1 | 2024-09-01-01:00:00 | 电力 |
I1 | 2024-09-01-01:15:00 | 错误 |
I1 | 2024-09-01-01:30:00 | 电池 |
I1 | 2024-09-01-01:45:00 | 错误 |
I1 | 2024-09-01-02:00:00 | 电池 |
现在,如果错误块下方和上方的值相同,那么我想用该值替换所有错误。另外,替换操作应该通过对Instance进行分区来完成。所以我的输出应该如下所示。
实例 | 时间 | 电源 |
---|---|---|
I1 | 2024-09-01-00:00:00 | 电力 |
I1 | 2024-09-01-00:15:00 | 电力 |
I1 | 2024-09-01-00:30:00 | 电力 |
I1 | 2024-09-01-00:45:00 | 电力 |
I1 | 2024-09-01-01:00:00 | 电力 |
I1 | 2024-09-01-01:15:00 | 错误<-- value above and below this is not same, hence not replaced |
I1 | 2024-09-01-01:30:00 | 电池 |
I1 | 2024-09-01-01:45:00 | 电池 |
I1 | 2024-09-01-02:00:00 | 电池 |
然后我想找到每个实例的每个电源的总计数、最大和最小连续计数。所以从上面的输出来看应该是: 电力 -> 总计数:5,最大连续数:5,最小连续数:5 电池 -> 总计数:3,最大连续次数:3,最小连续次数:3
我无法解决第一部分,但对于第二部分(查找计数),我计划在每个实例的列表中收集 power_source ,然后将其传递给 UDF 以查找计数。
我能想到的一种方法是使用带有自定义函数的 groupby 来对分组值进行操作。
我知道这不是最好的方法,但根据我的经验,这应该可行。如果我想到什么就会更新。