在Spark协作过滤RDD中将用户和项目功能保存到HDFS

一世

我想从使用Spark在ALS中进行协作过滤的结果中提取用户和项目特征(潜在因素)。到目前为止,我拥有的代码:

import org.apache.spark.mllib.recommendation.ALS
import org.apache.spark.mllib.recommendation.MatrixFactorizationModel
import org.apache.spark.mllib.recommendation.Rating

// Load and parse the data
val data = sc.textFile("myhdfs/inputdirectory/als.data")
val ratings = data.map(_.split(',') match { case Array(user, item, rate) =>
  Rating(user.toInt, item.toInt, rate.toDouble)
})

// Build the recommendation model using ALS
val rank = 10
val numIterations = 10
val model = ALS.train(ratings, rank, numIterations, 0.01)

// extract users latent factors
val users = model.userFeatures

// extract items latent factors
val items = model.productFeatures

// save to HDFS
users.saveAsTextFile("myhdfs/outputdirectory/users") // does not work as expected
items.saveAsTextFile("myhdfs/outputdirectory/items") // does not work as expected

但是,写入HDFS的内容并非我所期望的。我希望每一行都有一个元组(userId,Array_of_doubles)。相反,我看到以下内容:

[myname@host dir]$ hadoop fs -cat myhdfs/outputdirectory/users/*
(1,[D@3c3137b5)
(3,[D@505d9755)
(4,[D@241a409a)
(2,[D@c8c56dd)
.
.

它正在转储数组的哈希值,而不是整个数组。我将以下操作设置print为所需的值:

for (user <- users) {
  val (userId, lf) = user
  val str = "user:" + userId + "\t" + lf.mkString(" ")
  println(str)
}

这确实可以打印我想要的内容,但随后无法写入HDFS(在控制台上打印)。

我应该怎么做才能将完整的阵列正确写入HDFS?

Spark版本是1.2.1。

以利亚

@JohnTitusJungao是正确的,并且以下几行按预期工作:

users.saveAsTextFile("myhdfs/outputdirectory/users") 
items.saveAsTextFile("myhdfs/outputdirectory/items")

这就是原因,userFeatures返回RDD[(Int,Array[Double])]数组值由您在输出中看到的符号表示,例如[D@3c3137b5D对于double,其后是@和十六进制代码,该代码是使用Java toString方法针对此类对象创建的。这里更多

val users: RDD[(Int, Array[Double])] = model.userFeatures

为了解决这个问题,您需要将数组设置为字符串:

val users: RDD[(Int, String)] = model.userFeatures.mapValues(_.mkString(","))

项目也是如此。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

协作过滤中的多种功能-Spark

来自分类Dev

Apache Spark-MlLib-协作过滤

来自分类Dev

如何使用协作过滤通过用户的行为预测用户?

来自分类Dev

如何将用户添加和删除的项目保存到RecyclerView?安卓

来自分类Dev

创建用于协作过滤的用户项矩阵

来自分类Dev

无法在 Spring 5 WebFlux 中将用户保存到 mongodb

来自分类Dev

sql中的关系相似度计算(也称为用户-用户协作过滤)

来自分类Dev

Neo4J / Cypher基于项目的协作过滤是否可行?

来自分类Dev

在SQL(协作过滤)中返回与另一个用户相同的行

来自分类Dev

Mahout信任感知协作过滤

来自分类Dev

Apache Spark ALS协作过滤结果。他们没有道理

来自分类Dev

在移动应用程序中将用户会话保存到哪里

来自分类Dev

在Python 3.5.1中将用户输入保存到列表中

来自分类Dev

firebase / firestore将用户保存到集合

来自分类Dev

如何在Spark-scala中将Iterable [String]保存到hdfs

来自分类Dev

如何将用户输入保存到html和js中的变量中

来自分类Dev

如何将用户名和电子邮件保存到 Firebase

来自分类Dev

将Spark RDD保存到Hive表

来自分类Dev

spark rdd:分组和过滤

来自分类Dev

如何在for循环中将用户输入保存为整数和字符串

来自分类Dev

如何在for循环中将用户输入保存为整数和字符串

来自分类Dev

MLlib协作过滤以生成前N个建议

来自分类Dev

如何将用户名等信息保存到设备?

来自分类Dev

如何将用户输入保存到本地存储?

来自分类Dev

使用Express / Mongoose将用户IP地址保存到DB

来自分类Dev

如何将用户上传的图像保存到mySQL

来自分类Dev

将用户保存到MongoDB的Passport Facebook策略

来自分类Dev

如何将用户输入从表单保存到JavaScript对象

来自分类Dev

PHP将用户信息保存到txt文件

Related 相关文章

  1. 1

    协作过滤中的多种功能-Spark

  2. 2

    Apache Spark-MlLib-协作过滤

  3. 3

    如何使用协作过滤通过用户的行为预测用户?

  4. 4

    如何将用户添加和删除的项目保存到RecyclerView?安卓

  5. 5

    创建用于协作过滤的用户项矩阵

  6. 6

    无法在 Spring 5 WebFlux 中将用户保存到 mongodb

  7. 7

    sql中的关系相似度计算(也称为用户-用户协作过滤)

  8. 8

    Neo4J / Cypher基于项目的协作过滤是否可行?

  9. 9

    在SQL(协作过滤)中返回与另一个用户相同的行

  10. 10

    Mahout信任感知协作过滤

  11. 11

    Apache Spark ALS协作过滤结果。他们没有道理

  12. 12

    在移动应用程序中将用户会话保存到哪里

  13. 13

    在Python 3.5.1中将用户输入保存到列表中

  14. 14

    firebase / firestore将用户保存到集合

  15. 15

    如何在Spark-scala中将Iterable [String]保存到hdfs

  16. 16

    如何将用户输入保存到html和js中的变量中

  17. 17

    如何将用户名和电子邮件保存到 Firebase

  18. 18

    将Spark RDD保存到Hive表

  19. 19

    spark rdd:分组和过滤

  20. 20

    如何在for循环中将用户输入保存为整数和字符串

  21. 21

    如何在for循环中将用户输入保存为整数和字符串

  22. 22

    MLlib协作过滤以生成前N个建议

  23. 23

    如何将用户名等信息保存到设备?

  24. 24

    如何将用户输入保存到本地存储?

  25. 25

    使用Express / Mongoose将用户IP地址保存到DB

  26. 26

    如何将用户上传的图像保存到mySQL

  27. 27

    将用户保存到MongoDB的Passport Facebook策略

  28. 28

    如何将用户输入从表单保存到JavaScript对象

  29. 29

    PHP将用户信息保存到txt文件

热门标签

归档