基于不同的标准,我必须将当前行的时间戳与上一行进行比较,并检查差异。这是一个拥有十亿行以上的大数据框。这是问题说明:
对于errorId
和containerId
的每种组合
logId
,则是新的错误日志条目这是实现:
//Scala Sequence of the columns
List<Column> columns = Arrays.asList(rawData.col("errorId"), rawData.col("containerid"),
rawData.col("logId"));
Seq<Column> columnSeq = JavaConverters.asScalaIteratorConverter(columns.iterator()).asScala().toSeq();
//repartitioning raw data
Dataset<Row> sortedData = rawData
.repartition(columnSeq)
.sort("timestamp");
//Windowspec
WindowSpec w = Window.partitionBy(columnSeq).orderBy("timestamp");
//lag function
sortedData.withColumn("new_log_entry", functions.lag("timestamp", 60).over(w), "false");
//Write sorted data to db
将数据重新分区两次是个好主意吗?首先创建sortedData
,然后创建WindowSpec
。
此实现看起来不错吗?如何检查null
logId等?