【发布时间】:2018-11-28 01:56:43
【问题描述】:
我正在尝试下面给出的 prefixSpan 算法示例:
import org.apache.spark.mllib.fpm.PrefixSpan
val sequences = sc.parallelize(Seq(
Array(Array(1, 2), Array(3)),
Array(Array(1), Array(3, 2), Array(1, 2)),
Array(Array(1, 2), Array(5)),
Array(Array(6))
), 2).cache()
val prefixSpan = new PrefixSpan()
.setMinSupport(0.5)
.setMaxPatternLength(5)
val model = prefixSpan.run(sequences)
model.freqSequences.collect().foreach { freqSequence =>
println(
freqSequence.sequence.map(_.mkString("[", ", ", "]")).mkString("[", ", ", "]") +
", " + freqSequence.freq
)
}
首先,我不理解 .mkString("[", ", ", "]")).mkString("[", ", ", "]" 这部分,因为我是 Scala 新手。我喜欢python。我相信它就像 lambda 函数。
输出类似于以下内容:
[[2]], 3
[[5]], 1
[[3]], 2
[[6]], 1
[[1]], 3
...
...
[[1], [2, 3], [2]], 1
[[1], [2, 3], [2, 1]], 1
[[1], [2, 3], [1]], 1
我需要创建一个新的数据框,如果行长度大于1,例如下面是要保留的一行:
[[1], [2, 3], [2, 1]], 1
我需要创建一个包含以下内容的新数据框。 right 列始终是数组的最后一个元素([:-1]),其余部分在 left 中:
left |right
------------------------
[[1], [2, 3]] | [[2, 1]]
【问题讨论】:
标签: scala apache-spark apache-spark-sql data-mining apache-spark-mllib