标量计数事件仍在某个时间范围内进行

时间:2018-06-21 10:27:42

标签: apache-spark apache-zeppelin

我已经在Spark中创建了一个临时视图,该视图描述了打开文件的时间,关闭的时间,文件的打开方式(读取或写入)以及持续时间:

 start,fullpath,mode,end,duration
 2018-06-11 11:01:38.64,file1,W,2018-06-11 11:01:38.82,0.17999982833862305
 2018-06-11 11:02:02.74,file1,W,2018-06-11 11:02:02.85,0.1099998950958252
 2018-06-11 11:02:44.92,file7,W,2018-06-11 11:02:45.04,0.11999988555908203
 2018-06-11 11:02:56.64,file6,W,2018-06-11 11:02:56.75,0.1099998950958252
 2018-06-11 11:04:27.95,file5,W,2018-06-11 11:04:28.34,0.3899998664855957
 2018-06-11 11:05:07.94,file4,W,2018-06-11 11:05:08.52,0.5799999237060547
 2018-06-11 11:23:49.62,file2,R,2018-06-11 11:23:49.62,0.0
 2018-06-11 11:23:49.62,file3,R,2018-06-11 11:23:50.56,0.940000057220459
 2018-06-11 11:15:44.55,file1,W,2018-06-11 11:15:44.66,0.1100001335144043

我想做的是计算在n分钟的时间内当前打开了多少文件。
我很挣扎,真的不明白如何在pyspark / spark / sql中编写这样的请求。

我写了这个:

openFileTime.groupBy( $"mode",window($"start", "2 minutes").alias("frame")).count() \
.select($"frame",$"mode",$"count".alias("opencount"))

但这只是计算2分钟内打开的文件的数量,如果一个文件已经打开并且没有关闭2分钟,那么该文件将不被计数,我希望能够这样做。

0 个答案:

没有答案