我已经在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分钟,那么该文件将不被计数,我希望能够这样做。