Scala 使用foreach将列表添加到ListBuffer
我使用的是Mahout FPGrowth算法,但仍停留在数据的预处理上 FPGrowth算法的输入为: val数据:列表[JPair[JList[String],JLong]] 在我工作的早期阶段,我用硬编码的输入数据对它进行了测试Scala 使用foreach将列表添加到ListBuffer,scala,apache-spark,scala-collections,Scala,Apache Spark,Scala Collections,我使用的是Mahout FPGrowth算法,但仍停留在数据的预处理上 FPGrowth算法的输入为: val数据:列表[JPair[JList[String],JLong]] 在我工作的早期阶段,我用硬编码的输入数据对它进行了测试 val data: List[JPair[JList[String], JLong]] = List( new JPair(List("bread", "beer", "fries", "butter"), 1L), new JPair(List("milk
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)仍然为空
有人有什么想法吗?如果没有看到初始化
ListBuf
的代码,就很难说了,但我建议您一种更好的方法,它不涉及可变集合
您希望通过对parsedData
的每个元素应用转换来生成一个新集合,而这正是map
所做的。这里有一个例子
val data = parsedData.map(new JPair(JString(_.str), JLong(1L)))
我显式地使用了
JString
和JLong
构造函数,这样您就不必对类型进行注释。在没有看到初始化ListBuf
的代码的情况下,很难判断,但我建议您使用一种更好的方法,它不涉及可变集合
您希望通过对parsedData
的每个元素应用转换来生成一个新集合,而这正是map
所做的。这里有一个例子
val data = parsedData.map(new JPair(JString(_.str), JLong(1L)))
我明确使用了
JString
和JLong
构造函数,这样您就不必对类型进行注释了。嘿,Gabriele,谢谢您的回复。ListBuffer的初始化是var ListBuf=ListBuffer[JPair[JList[String],JLong]]()。如果我将一个元素添加到ListBuf,并且ListBuf+=newjpair(List(“test”,“test2”),1L),它就会工作。我以类似的方式尝试了您对映射的建议,但给出了以下错误:-object java.lang.Long不是值-缺少扩展函数的参数类型((x$2)=>x$2.str)编辑:如果使用var数据:List[JPair[JList[String],JLong]=parsedData.map(c=>new JPair(c.str,1L)),我得到:-类型不匹配;找到:org.apache.spark.rdd.rdd[org.apache.mahout.common.Pair[List[String],scala.Long]]必需:List[org.apache.mahout.common.Pair[java.util.List[String],java.lang.Long]-类型不匹配;找到:Array[org.apache.mahout.common.Pair[scala.collection.immutable.List[String],scala.Long]]必需:scala.collection.immutable.List[org.apache.mahout.common.Pair[java.util.List[String],java.lang.Long]]嘿,Gabriele,谢谢你的回复。ListBuffer的初始化是var ListBuf=ListBuffer[JPair[JList[String],JLong]]()。如果我将一个元素添加到ListBuf,并且ListBuf+=newjpair(List(“test”,“test2”),1L),它就会工作。我以类似的方式尝试了您对映射的建议,但给出了以下错误:-object java.lang.Long不是值-缺少扩展函数的参数类型((x$2)=>x$2.str)编辑:如果使用var数据:List[JPair[JList[String],JLong]=parsedData.map(c=>new JPair(c.str,1L)),我得到:-类型不匹配;找到:org.apache.spark.rdd.rdd[org.apache.mahout.common.Pair[List[String],scala.Long]]必需:List[org.apache.mahout.common.Pair[java.util.List[String],java.lang.Long]-类型不匹配;找到:数组[org.apache.mahout.common.Pair[scala.collection.immutable.List[String],scala.Long]]必需:scala.collection.immutable.List[org.apache.mahout.common.Pair[java.util.List[String],java.lang.Long]]