Scala 匿名函数的参数类型必须完全已知。(SLS 8.5)当word2vec应用于数据帧时
我使用数据帧应用Spark的word2vec。这是我的密码:Scala 匿名函数的参数类型必须完全已知。(SLS 8.5)当word2vec应用于数据帧时,scala,apache-spark,dataframe,apache-spark-mllib,Scala,Apache Spark,Dataframe,Apache Spark Mllib,我使用数据帧应用Spark的word2vec。这是我的密码: val df2 = df.groupBy("LABEL").agg(collect_list("TERM").alias("TERM")) val word2Vec = new Word2Vec() .setInputCol("TERM") .setOutputCol("result") .setMinCount(0) val model = word2Vec.fit(df2)
val df2 = df.groupBy("LABEL").agg(collect_list("TERM").alias("TERM"))
val word2Vec = new Word2Vec()
.setInputCol("TERM")
.setOutputCol("result")
.setMinCount(0)
val model = word2Vec.fit(df2)
val result = model.transform(df2)
val synonyms = model.findSynonyms("4", 10)
//synonyms.foreach(println)
for((synonym, cosineSimilarity) <- synonyms) {
println(s"$synonym $cosineSimilarity")
}
从其他类似的stackoverflow问题和错误来看,似乎需要确切的参数类型。在for循环中,synonyms是一个数据帧,返回值的类型分别为String和Double。所以我所有的试验都失败了。我该如何补救呢?FindSynoyms的结果是一个非物化的Spark internal
数据帧。您不能简单地对结果进行迭代
def findSynonyms(word: Vector, num: Int): DataFrame = {
..
sc.parallelize(wordVectors.findSynonyms(word, num)).toDF("word", "similarity")
}
注意,foreach
工作的原因是,这是一种在DataFrame上明确定义的物化方法,findSynonyms
的结果是一个非物化的火花内部DataFrame
。您不能简单地对结果进行迭代
def findSynonyms(word: Vector, num: Int): DataFrame = {
..
sc.parallelize(wordVectors.findSynonyms(word, num)).toDF("word", "similarity")
}
注意,foreach
工作的原因是它是一种在DataFrame
上明确定义的物化方法