根据prefixSpan模型生成的结果,如何将所有结果保存到按频率排序的文件中?结果的数据结构不能直接支持saveAsTextFile函数。
result = model.freqSequences().collect()
print result
for fs in result:
print('{}, {}'.format(fs.sequence,fs.freq))
预期结果如下:
[[20],[3]], 8,11.42%
[[7]], 6,8.57%
[[13]], 2,2.85%
答案 0 :(得分:0)
如果您只想保存freqSequences
,请不要在该RDD上调用collect
,然后将其保存到文本文件中:
model.freqSequences().saveAsTextFile("path")
然而,这可能没那么有用,因为它会将toString
的结果保存在每个RDD的记录中(PrefixSpan.FreqSequence[Item]
类型)以后可能不太容易解析。所以 - 您可以自己将这些记录格式化为字符串,以便以您能够使用的格式编写它们:
// Format an array using brackets, if that's how you want it;
// You can implement whatever format you want...
def format[T](t: T): String = t match {
case a: Array[_] => a.map(t => s"[${format(t)}]").mkString(",")
case _ => t.toString
}
model.freqSequences()
.map(fs => s"${format(fs.sequence)}, ${fs.freq}")
.saveAsTextFile("path")
最后,如果您要保存这些结果以便稍后使用Spark应用此模型,请考虑直接使用save
:
model.save(sc, "path")
以后可以使用以下方式加载:
PrefixSpanModel.load(sc, "path")