gpt4 book ai didi

apache-spark - 如何在 PySpark ALS 中使用长用户 ID

转载 作者:行者123 更新时间:2023-12-05 01:02:40 26 4
gpt4 key购买 nike

我试图在 PySpark MLlib (1.3.1) 的 ALS 模型中使用长用户/产品 ID,但遇到了问题。这里给出了代码的简化版本:

from pyspark import SparkContext
from pyspark.mllib.recommendation import ALS, Rating

sc = SparkContext("","test")

# Load and parse the data
d = [ "3661636574,1,1","3661636574,2,2","3661636574,3,3"]
data = sc.parallelize(d)
ratings = data.map(lambda l: l.split(',')).map(lambda l: Rating(long(l[0]), long(l[1]), float(l[2])) )

# Build the recommendation model using Alternating Least Squares
rank = 10
numIterations = 20
model = ALS.train(ratings, rank, numIterations)

运行此代码会产生 java.lang.ClassCastException,因为该代码正在尝试将 long 转换为整数。查看源代码,ml ALS class在 Spark 中允许使用较长的用户/产品 ID,但之后是 mllib ALS class强制使用整数。

问题:是否有在 PySpark ALS 中使用长用户/产品 ID 的解决方法?

最佳答案

这是已知问题 (https://issues.apache.org/jira/browse/SPARK-2465),但不会很快解决,因为将接口(interface)更改为长 userId 会减慢计算速度。

解决办法很少:

  • 您可以使用 hash() 函数将 userId 哈希为 int,因为它在少数情况下只会导致随机行压缩,因此冲突不应该影响您推荐器的准确性,真的。第一个链接中的讨论。

  • 您可以使用 RDD.zipWithUniqueId() 或速度较慢的 RDD.zipWithIndex 生成唯一的 int userId,就像在此线程中一样:How to assign unique contiguous numbers to elements in a Spark RDD

关于apache-spark - 如何在 PySpark ALS 中使用长用户 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30314879/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com