了解mllib滑动

问题描述 投票:0回答:1

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

但是后来我遇到了这个:

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的滑动方法是什么意思?那些犹太人价值观是什么?

scala apache-spark machine-learning apache-spark-mllib sliding-window
1个回答
1
投票

documentationsliding中,我们可以看到:

通过在其上传递滑动窗口,从固定大小的块中将其父RDD的项目分组返回RDD。排序首先基于分区索引,然后基于每个分区中的项目排序。 [...]

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

sliding操作的结果是Array。使用print将调用对象的toString方法,但是Array不会覆盖此方法,而是将使用Object中定义的方法,即TypeName@hexadecimalHash,请参见How do I print my Java object without getting "SomeType@2f92e0f4"?

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

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

1,2,3
2,3,4
5,6,7
...
97,98,99
© www.soinside.com 2019 - 2024. All rights reserved.