Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 使用foreach将列表添加到ListBuffer_Scala_Apache Spark_Scala Collections - Fatal编程技术网

Scala 使用foreach将列表添加到ListBuffer

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

我使用的是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", "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]]