Spark 将 RDD[(Int, Array[Double])] 保存到文本文件得到了奇怪的结果

Spark saving RDD[(Int, Array[Double])] to text file got strange result

我正在尝试将 MatrixFactorizationModel 的 userFeature 保存到 textFile,根据文档,它是 [(Int, Array[Double])] 类型的 RDD。所以我刚刚打电话给

model.userFeature.saveAsTextFile("feature")

然而,我得到的结果是这样的:

(1,[D@4b7707f1)
(5,[D@513e9aca)
(9,[D@7d09bcab)
(13,[D@31058458)
(17,[D@2a5df2a7)
(21,[D@5372efd7)
(25,[D@59d1c59a)
(29,[D@53ee5e25)
(33,[D@498f5a34)
(37,[D@4f9967eb)
(41,[D@5560afb)
(45,[D@2dc7f659)
(49,[D@b46fcc)
(53,[D@38098dd1)
(57,[D@77090fb5)
(61,[D@64769e18)

我期待的是这样的:

(1, [1.1, 2.3, 0.4, ...])
(2, [0.1, 0.3, 0.4, ...])
...

所以怎么了?

saveAsTextFile的行为是使用toString方法。因此,对于 Array,这仅仅是 hashcode。如果你坚持使用 saveAsTextFile:

,你有两个选择
.mapValues(x=>/*TURN ARRAY DATA INTO A STRING*/).saveAsTextFile...

或者您可以使用 map 将数据包装在具有自定义 toString 的自定义对象中,或者在这种情况下 List 及其 toString 可能会起作用

.mapValues(_.toList).saveAsTextFile