Spark MlLib Frequent Pattern Mining,类型参数边界

时间:2015-11-03 23:10:34

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

我有一个键中的数据,值配对键是列索引,值是该列值中的任何值。我的原始文件只是一个csv。所以我有以下内容:

val myData = sc.textFile(file1)
  .map(x => x.split('|'))
  .flatMap(x => x.zipWithIndex)
  .map(x => x.swap)
  .groupByKey().cache

这将我的数据放入myData:Array [(Int,Iterable [String])]

val fpg = new FPGrowth()
  .setMinSupport(0.2)
  .setNumPartitions(1)

val model = fpg.run(myData)

我遇到以下问题:

<console>:29: error: inferred type arguments [Nothing,(Int, Iterable[String])] do not conform to method run's type parameter bounds [Item,Basket <: Iterable[Item]]

我正在尝试学习如何使用MlLib,并且不太了解这个问题。我还尝试删除索引和.map(x =&gt; x._2)并制作只有可迭代数据的集合,但也失败了。

1 个答案:

答案 0 :(得分:2)

这可以解决您的问题:

fpg.run(myData.values.map(_.toArray))

基本上FPGrowth需要Array Items。传递groupByKey的输出无效,因为它包含Tuple2map(x => x._2)的输出无法正常工作,因为值不是Array

RDD的每个元素代表一个篮子,只应包含唯一的项目。如果您希望重复,可以使用_.toSet.toArray_distinct.toArray