如何使用Scala将prefixSpan结果保存到文件中?

时间:2017-08-07 19:47:09

标签: scala apache-spark apache-spark-mllib

根据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%

1 个答案:

答案 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")