加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 从DataFrame到RDD [LabeledPoint]

发布时间:2020-12-16 09:10:58 所属栏目:安全 来源:网络整理
导读:我正在尝试使用Apache Spark MLlib实现文档分类器,并且我在表示数据时遇到一些问题.我的代码如下: import org.apache.spark.sql.{Row,SQLContext}import org.apache.spark.sql.types.{StringType,StructField,StructType}import org.apache.spark.ml.featur
我正在尝试使用Apache Spark MLlib实现文档分类器,并且我在表示数据时遇到一些问题.我的代码如下:

import org.apache.spark.sql.{Row,SQLContext}
import org.apache.spark.sql.types.{StringType,StructField,StructType}
import org.apache.spark.ml.feature.Tokenizer
import org.apache.spark.ml.feature.HashingTF
import org.apache.spark.ml.feature.IDF

val sql = new SQLContext(sc)

// Load raw data from a TSV file
val raw = sc.textFile("data.tsv").map(_.split("t").toSeq)

// Convert the RDD to a dataframe
val schema = StructType(List(StructField("class",StringType),StructField("content",StringType)))
val dataframe = sql.createDataFrame(raw.map(row => Row(row(0),row(1))),schema)

// Tokenize
val tokenizer = new Tokenizer().setInputCol("content").setOutputCol("tokens")
val tokenized = tokenizer.transform(dataframe)

// TF-IDF
val htf = new HashingTF().setInputCol("tokens").setOutputCol("rawFeatures").setNumFeatures(500)
val tf = htf.transform(tokenized)
tf.cache
val idf = new IDF().setInputCol("rawFeatures").setOutputCol("features")
val idfModel = idf.fit(tf)
val tfidf = idfModel.transform(tf)

// Create labeled points
val labeled = tfidf.map(row => LabeledPoint(row.getDouble(0),row.get(4)))

我需要使用数据帧生成令牌并创建TF-IDF功能.当我尝试将此数据帧转换为RDD [LabeledPoint]时,出现此问题.我映射数据帧行,但是Row的get方法返回一个Any类型,而不是在数据帧架构(Vector)上定义的类型.因此,我不能构建我需要训练ML模型的RDD.

计算TF-IDF后获得RDD [LabeledPoint]的最佳选择是什么?

解决方法

铸造对象为我工作.

尝试:

// Create labeled points
val labeled = tfidf.map(row => LabeledPoint(row.getDouble(0),row(4).asInstanceOf[Vector]))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读