我有这个函数用于从两个JSON对象中提取时间戳:
lineReader.on('line', function (line) {
var obj = JSON.parse(line);
if(obj.Event == "SparkListenerApplicationStart" || obj.Event == "SparkListenerApplicationEnd") {
console.log('Line from file:', obj.Timestamp);
}
});
JSON来自日志文件(不是JSON),其中每一行代表日志中的一个条目,每一行也恰好是JSON格式。
这两个对象代表作业的开始和结束。这些可以通过事件键(SparkListenerApplicationStart和SparkListenerApplicationEnd)来识别。它们都包含时间戳键。我想从开始时间中减去结束时间以获得持续时间。
我的想法是将来自JSON的时间戳分配给一个变量,其中将事件键= SparkListenerApplicationEart的JSON分配给另一个变量,并将另一个变量中的一个变量减去一个变量。我怎样才能做到这一点?我知道我不能做任何事情:
var startTime = if(obj.Event == "SparkListenerApplicationStart"){
return obj.Timestamp;
}
答案 0 :(得分:1)
我不确定我是否理解,但如果正在阅读行并希望得到每行的Timestamp
,我会重新写一个新对象;
const collection = []
lineReader.on('line', function (line) {
var obj = JSON.parse(line);
if(obj.Event == "SparkListenerApplicationStart" || obj.Event == "SparkListenerApplicationEnd") {
// console.log('Line from file:', obj.Timestamp);
collection.push(obj.Timestamp)
}
});
console.log(collection);
collection
可以是LocalStorage,Global Variable或类似内容。
其他信息 关于我在哪里查询如何识别开始和结束时间的评论,我最终将start设置为最小值并结束为最大值。这是我的最终代码:
const collection = []
lineReader.on('line', function (line) {
var obj = JSON.parse(line);
if((obj.Event == "SparkListenerApplicationStart" || obj.Event == "SparkListenerApplicationEnd")) {
collection.push(obj.Timestamp);
if(collection.length == 2){
startTime = Math.min.apply(null, collection);
finishTime = Math.max.apply(null, collection);
duration = finishTime - startTime;
console.log(duration);
}
}
});