如何将 spark 数据帧转换为 RDD 并获取词袋

Posted

技术标签:

【中文标题】如何将 spark 数据帧转换为 RDD 并获取词袋【英文标题】:How do i convert spark dataframe to RDD and get bag of words 【发布时间】:2016-03-10 17:05:13 【问题描述】:

我有一个名为 article 的数据框

+--------------------+
|     processed_title|
+--------------------+
|[new, relictual, ...|
|[once, upon,a,time..|
+--------------------+

我想把它弄平,把它变成一个词袋。 我怎么能用目前的情况来实现这一点。我尝试了下面的代码,这似乎给了我一个类型不匹配的问题。

val bow_corpus = article.select("processed_title").rdd.flatMap(y => y)

我最终想用这个 bow_corpus 来训练一个 word2vec 模型。

谢谢

【问题讨论】:

【参考方案1】:

假设processed_title在SQL中表示为array<string>

article.select("processed_title").rdd.flatMap(_.getSeq[String](0))

还有Word2Vec 可以直接在DataFrame 上训练的转换器:

import org.apache.spark.ml.feature.Word2Vec

val word2Vec = new Word2Vec()
  .setInputCol("processed_title")
  .setOutputCol("vectors")
  .setMinCount(0)
  .fit(article)

word2Vec.findSynonyms("foo", 1)

另见Spark extracting values from a Row

【讨论】:

以上是关于如何将 spark 数据帧转换为 RDD 并获取词袋的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ipython 中将 Spark RDD 转换为 pandas 数据帧?

使用spark数据帧/数据集/ RDD使用内部联接进行更新

将 RDD 中的 JSON 行转换为 Apache Spark 中的数据帧

如何使用用户定义的类和 toDF 将 RDD 转换为数据帧

如何在火花中将rdd对象转换为数据框

将 RDD 转换为 Dataframe Spark