我的问题是这个。 我有一个从netflow记录中创建的自定义数据帧,其中包含columnMentS列(这是给定分钟内所有流的相同值),sourcePort和一些其他值,例如sourceIP,packetDelta等。 每行都有一行,一分钟内可能有很多行。 我想做的是计算一分钟间隔内所有流的不同端口的数量,但是我只想计算在90%百分位数之内的不同端口的数量,以了解它们的通用性。 这意味着我只希望90%最独特的端口数量和10%最不常见的端口数量对我不感兴趣。
我想我需要做的是:
每分钟创建一个单独的daframe。
在这些结果数据框中:
采取这些组中前90%并计算有多少组。这将在一个分钟内给出一个值 X ,即不同端口的90%。
返回“外部”:
将此列与我通过Minute进行分组和排序并根据我用于计算与此问题无关的其他值的逻辑进行汇总而创建的其他数据框结合起来。
最终结果是一个数据帧,该数据帧每分钟只有一行,其列之一是所需的前90%最常见的不同源端口的数量。
问题是,我对Scala还是很陌生,甚至在为概述的步骤编写代码时也遇到了问题,但更重要的是,我觉得这样做效率极低并且可以优雅得多地完成,我只是不知道如何。任何帮助或指针表示赞赏。
模拟输入数据框:
flowID minuteMs srcPortNumber packetDelta
0 146000 80 5
1 146000 90 8
2 146000 90 4
3 146000 90 4
4 146000 90 17
5 146000 90 22
6 146000 80 2
7 146000 80 3
8 146000 80 4
9 146000 343 3
10 152000 133 5
11 152000 80 31
12 152000 8081 4
预期输出:
minuteMs 90thPercCountDistPorts packetCount
146000 2 72
152000 3 40
packetCount列只是给定分钟内所有流的数据包的求和,我不需要帮助,它只是用来说明还存在其他列。
请注意,时间146000中的端口343不计入时间,因为在该时间窗口中,它仅出现在六分之一的流量中,因此属于最不常见的10%,因此不应计入。