繁体   English   中英

如何在Scala(Spark 2.0)中将带有字符串的DataFrame转换为带有矢量的DataFrame

[英]How to convert a DataFrame with String into a DataFrame with Vectors in Scala(Spark 2.0)

我有一个名为KFA的列的DataFrame,该列包含两端带有尖括号的字符串。 该长字符串中有4个double值。 我想将其转换为带有向量的DataFrame。

这是DataFrame的第一个元素:

> dataFrame1.first()
res130: org.apache.spark.sql.Row = [[.00663 .00197 .29809 .0034]]

您能帮我把它转换成具有4个double值的密集向量吗?

我已经尝试过此命令

dataFrame1.select("KFA")
    .map((x=>x.mkString("").replace("]","").replace("[","").split(" ")))
    .rdd.map(x=>Vectors.dense(x(0).toDouble,x(1).toDouble,x(2).toDouble,x(3).toDouble,x(4).toDouble))

这看起来很笨拙且不可读。 您能提出其他建议吗?

这是带有正则表达式的选项:

import org.apache.spark.mllib.linalg.{Vector, Vectors}

val p = "[.0-9]+".r 
val rddVec = dataFrame1.select("KFA")
             .map(x => Vectors.dense(p.findAllIn(x(0).toString).map(_.toDouble).toArray))

# rddVec: org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector] = MapPartitionsRDD[49] at map at <console>:39

rddVec.collect
# res43: Array[org.apache.spark.mllib.linalg.Vector] = 
         Array([0.00663,0.00197,0.29809,0.0034], [0.00663,0.00197,0.29809,0.0034])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM