我正在使用Mahout FPGrowth算法,但坚持预处理数据。
FPGrowth算法的输入是: val数据:List [JPair [JList [String],JLong]]
在我工作的早期阶段,我用硬编码的输入数据进行了测试。
val data: List[JPair[JList[String], JLong]] = List(
new JPair(List("bread", "beer", "fries", "butter"), 1L),
new JPair(List("milk", "bread"), 1L),
new JPair(List("butter", "beer", "fries"), 1L),
new JPair(List("bread", "beer"), 1L),
new JPair(List("milk", "butter", "bread", "beer"), 1L)
)
有效。但我想自动填写清单。我在scala中读到了这可以使用ListBuffers。我试图在foreach步骤中填充ListBuffer。但这不起作用。
parsedData.foreach( p => ListBuf += new JPair(p.str, 1L) )
val ItemSet = ListBuf.toList
在应用程序的末尾,列表(ItemSet)仍为空。
有人有想法吗?
答案 0 :(得分:4)
在没有看到初始化ListBuf
的代码的情况下,它有点难以辨别,但是让我建议一个更好的方法,它不涉及可变集合。
您希望通过对parsedData
的每个元素应用转换来生成新集合,而这正是map
所做的。这是一个例子
val data = parsedData.map(new JPair(JString(_.str), JLong(1L)))
我明确使用了JString
和JLong
构造函数,因此您不必注释该类型。