类似的东西:
val arr : Array[Array[Double]] = new Array(featureSize)
sc.parallelize(arr, 100).saveAsTextFile(args(1))
然后Spark会将数据类型存储到HDFS中。
答案 0 :(得分:2)
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))