相关疑难解决方法(0)

Spark Scala:如何将Dataframe [vector]转换为DataFrame [f1:Double,...,fn:Double]]

我只是使用标准缩放器来规范我的ML应用程序的功能.选择缩放功能后,我想将其转换回双打数据帧,尽管我的矢量长度是任意的.我知道如何使用特定的3个功能

myDF.map{case Row(v: Vector) => (v(0), v(1), v(2))}.toDF("f1", "f2", "f3")
Run Code Online (Sandbox Code Playgroud)

但不是任意数量的功能.是否有捷径可寻?

例:

val testDF = sc.parallelize(List(Vectors.dense(5D, 6D, 7D), Vectors.dense(8D, 9D, 10D), Vectors.dense(11D, 12D, 13D))).map(Tuple1(_)).toDF("scaledFeatures")
val myColumnNames = List("f1", "f2", "f3")
// val finalDF = DataFrame[f1: Double, f2: Double, f3: Double] 
Run Code Online (Sandbox Code Playgroud)

编辑

我在创建数据帧时发现了如何解压缩到列名,但是仍然无法将向量转换为创建数据帧所需的序列:

finalDF = testDF.map{case Row(v: Vector) => v.toArray.toSeq /* <= this errors */}.toDF(List("f1", "f2", "f3"): _*)
Run Code Online (Sandbox Code Playgroud)

scala apache-spark apache-spark-sql apache-spark-ml

4
推荐指数
1
解决办法
9698
查看次数

将Array of String列转换为spark scala中的多个列

我有一个包含以下架构的数据框:

id         : int,
emp_details: Array(String)
Run Code Online (Sandbox Code Playgroud)

一些样本数据:

1, Array(empname=xxx,city=yyy,zip=12345)
2, Array(empname=bbb,city=bbb,zip=22345)
Run Code Online (Sandbox Code Playgroud)

这个数据存在于数据框中,我需要emp_details从数组中读取并将其分配给新列,如下所示,或者如果我可以split将此数组分配给列名为的多列empname,city并且zip:

.withColumn("empname", xxx)
.withColumn("city", yyy)
.withColumn("zip", 12345)
Run Code Online (Sandbox Code Playgroud)

你能指导我们如何使用Spark(1.6)Scala实现这一目标.

真的很感谢你的帮助......

非常感谢

scala apache-spark

0
推荐指数
1
解决办法
4821
查看次数