如何在spark中将二维数组保存到HDFS中?

时间:2015-12-23 03:10:49

标签: scala apache-spark hdfs

类似的东西:

val arr : Array[Array[Double]] = new Array(featureSize)
sc.parallelize(arr, 100).saveAsTextFile(args(1))

然后Spark会将数据类型存储到HDFS中。

1 个答案:

答案 0 :(得分:2)

Scala中的

Array与Java Arrays完全对应 - 特别是,它是一个可变类型,其toString方法将返回对Array的引用。当你将这个RDD保存为textFile时,它会在RDD的每个元素上调用toString方法,因此会给你乱码。如果要输出Array的实际元素,首先必须对Array进行字符串化,例如将mkString(",")方法应用于每个数组。 Spark shell的示例:

scala> Array(1,2,3).toString
res11: String = [I@31cba915

scala> Array(1,2,3).mkString(",")
res12: String = 1,2,3

对于双数组:

scala> sc.parallelize(Array( Array(1,2,3), Array(4,5,6), Array(7,8,9) )).collect.mkString("\n")
res15: String = 
[I@41ff41b0
[I@5d31aba9
[I@67fd140b

scala> sc.parallelize(Array( Array(1,2,3), Array(4,5,6), Array(7,8,9) ).map(_.mkString(","))).collect.mkString("\n")
res16: String = 
1,2,3
4,5,6
7,8,9

所以,你的代码应该是:

sc.parallelize(arr.map(_.mkString(",")), 100).saveAsTextFile(args(1))

sc.parallelize(arr), 100).map(_.mkString(",")).saveAsTextFile(args(1))