理解 mllib 滑动

Understanding mllib sliding

我知道 Spark Structured Streaming 中的滑动 window 是 window 事件时间,具有 window 大小(以秒为单位)和步长(以秒为单位) .

但后来我发现了这个:

import org.apache.spark.mllib.rdd.RDDFunctions._

sc.parallelize(1 to 100, 10)
  .sliding(3)
  .map(curSlice => (curSlice.sum / curSlice.size))
  .collect()

我不明白这个。这里没有活动时间,那么sliding是做什么的呢?

如果我在 .map 行中发表评论,那么我会得到如下结果:

[I@7b3315a5
[I@8ed9cf
[I@f72203
[I@377008df
[I@540dbda9
[I@22bb5646
[I@1be59f28
[I@2ce45a7b
[I@153d4abb
...

在简单整数上使用mllib的滑动方法是什么意思?那些 Jebrish 价值观是什么?

slidingdocumentation中我们可以看到:

Returns an RDD from grouping items of its parent RDD in fixed size blocks by passing a sliding window over them. The ordering is first based on the partition index and then the ordering of items within each partition. [...]

所以在使用 sc.parallelize(1 to 100, 10) 的情况下,顺序将是从 1 到 100 的连续数字。

sliding 操作的结果是 Array。使用 print 将调用对象的 toString 方法,但是,Array 不会覆盖此方法,而是会使用 Object 中定义的方法,即 TypeName@hexadecimalHash,请参阅 .

您可以使用 map(_.toSeq) 将数组转换为 Seq,这将覆盖 toString 方法(从而按预期打印列表)。或者您可以使用 map(_.mkString(",")) 将数组转换为字符串。

使用 sliding(3) 的结果将是(按此固定顺序):

1,2,3
2,3,4
5,6,7
...
97,98,99