【问题标题】:multiple features in collaborative filtering- spark协同过滤中的多个功能-火花
【发布时间】:2016-02-28 22:57:58
【问题描述】:

我有一个 CSV 文件,如下所示:

customer_ID, location, ....other info..., item-bought, score

我正在尝试在 Spark 中构建一个协同过滤推荐器。 Spark 获取以下形式的数据:

userID, itemID, value

但我的数据更长,我希望使用所有用户的信息,而不仅仅是 userID。我尝试将一列中的列分组为:

(customerID,location,....),itemID,score

但是ALS.train 给了我这个错误:

TypeError: int() 参数必须是字符串或数字,而不是“元组”

如何让 spark 获取多个键/值,而不仅仅是三列? 谢谢

【问题讨论】:

  • 如果 train() 想要一个数字字符串,这表明它需要某种标识符。您可以将列值混合在一起并制作长字符串,或者甚至更好地将每个元组关联到一个整数标识符并提供它。在关系数据库中创建一个表并使用行号。
  • 重要提示:仅当您希望它们分隔数据时,才应将列添加到您的标识符中。在上面输入的内容中,您似乎是在说两个不同位置的同一个客户应该被视为不同的客户。确保这是你想要的。
  • 是的,我希望将不同位置的同一客户视为不同。那么,如果我将每个客户行映射到一个标识符,那么我的推荐人会考虑他的具体信息吗?
  • 是的,它会将它们视为不同的实体。另请注意,同样的推理也适用于项目
  • 您可以使用 zipWithUniqueId 方法创建一个具有不同值参数(customerID,location,....)的索引 RDD,然后将索引用作用户而不是您的 Rating 对象。

标签: python apache-spark pyspark collaborative-filtering apache-spark-mllib


【解决方案1】:

对于每个客户,确定您希望用来区分这些用户实体的列。创建一个表(例如在 SQL 中),其中每一行都包含一个用户实体的信息,并使用该表中的行号作为用户 ID。

如有必要,对您的项目执行相同操作,并将这些 ID 提供给您的分类器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多