我有一个键中的数据,值配对键是列索引,值是该列值中的任何值。我的原始文件只是一个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)并制作只有可迭代数据的集合,但也失败了。
答案 0 :(得分:2)
这可以解决您的问题:
fpg.run(myData.values.map(_.toArray))
基本上FPGrowth
需要Array
Items
。传递groupByKey
的输出无效,因为它包含Tuple2
,map(x => x._2)
的输出无法正常工作,因为值不是Array
。
RDD的每个元素代表一个篮子,只应包含唯一的项目。如果您希望重复,可以使用_.toSet.toArray
或_distinct.toArray
。