使用 Scala 将 Array[DenseVector] 转换为 CSV
Posted
技术标签:
【中文标题】使用 Scala 将 Array[DenseVector] 转换为 CSV【英文标题】:Convert Array[DenseVector] to CSV with Scala 【发布时间】:2018-06-13 16:37:07 【问题描述】:我在 Scala 中使用 Kmeans Spark 函数,我需要将获得的集群中心保存到 CSV 中。这个 val 的类型是:Array[DenseVector]
。
val clusters = KMeans.train(parsedData, numClusters, numIterations)
val centers = clusters.clusterCenters
我试图将centers
转换为 RDD 文件,然后从 RDD 转换为 DF,但我遇到了很多问题(例如 import spark.implicits._ / SQLContext.implicits._ 不起作用,我无法使用.toDF
)。我想知道是否有另一种方法可以使 CSV 更容易。
有什么建议吗?
【问题讨论】:
【参考方案1】:无需使用外部库,您只需以 Java 方式写入文件即可。
import java.io. PrintWriter, File, FileOutputStream
...
val pw = new PrintWriter(
new File( "KMeans_centers.csv" )
)
centers
.foreach( vec =>
pw.write( vec.toString.drop( 1 ).dropRight( 1 ) + "\n" )
)
pw.close()
结果文件
0.1,0.1,0.1
9.1,9.1,9.1
需要drop
和dropRight
来移除转换后的向量周围的[]
。
代码和数据取自官方example。
【讨论】:
以上是关于使用 Scala 将 Array[DenseVector] 转换为 CSV的主要内容,如果未能解决你的问题,请参考以下文章
将 Scala 中的任何类型转换为 Array[Byte] 并返回
Scala 库将数字(Int、Long、Double)与 Array[Byte] 相互转换