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

scala – Spark:输入一个向量

发布时间:2020-12-16 19:13:27 所属栏目:安全 来源:网络整理
导读:我陷入了火花,我对矢量有问题 ????import org.apache.spark.mllib.linalg.{Vectors,Vector} 我的程序输入是一个文本文件,包含RDD(Vector)的输出: dataset.txt: [-0.5069793074881704,-2.368342680619545,-3.401324690974588][-0.7346396928543871,-2.34079
我陷入了火花,我对矢量有问题
????import org.apache.spark.mllib.linalg.{Vectors,Vector}

我的程序输入是一个文本文件,包含RDD(Vector)的输出:
dataset.txt:

[-0.5069793074881704,-2.368342680619545,-3.401324690974588]
[-0.7346396928543871,-2.3407983487917448,-2.793949129209909]
[-0.9174226561793709,-0.8027635530022152,-1.701699021443242]
[0.510736518683609,-2.7304268743276174,-2.418865539558031]

所以,尝试做的是:

val rdd = sc.textFile("/workingdirectory/dataset")
val data = rdd.map(s => Vectors.dense(s.split(',').map(_.toDouble)))

我有错误,因为它读取[0.510736518683609作为数字.
存在任何形式直接加载存储在文本文件中的向量而不执行第二行?我如何在地图阶段删除“[”?
如果这是一个非常明显的问题,我真的很新兴了.

解决方法

给定输入,您可以做的最简单的事情是使用Vectors.parse:

scala> import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.linalg.Vectors

scala> Vectors.parse("[-0.50,-2.36,-3.40]")
res14: org.apache.spark.mllib.linalg.Vector = [-0.5,-3.4]

它也适用于稀疏表示:

scala> Vectors.parse("(10,[1,5],[0.5,-1.0])")
res15: org.apache.spark.mllib.linalg.Vector = (10,-1.0])

将它与您的数据相结合,您只需要:

rdd.map(Vectors.parse)

如果您希望格式错误/空行,可以使用Try包装它:

import scala.util.Try

rdd.map(line => Try(Vectors.parse(line))).filter(_.isSuccess).map(_.get)

(编辑:李大同)

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

    推荐文章
      热点阅读