Scala 如何在spark的Vector.sparse中使用BigInt/Long作为大小类型?

Scala 如何在spark的Vector.sparse中使用BigInt/Long作为大小类型?,scala,vector,apache-spark,apache-spark-mllib,Scala,Vector,Apache Spark,Apache Spark Mllib,我需要处理大量数据,我使用spark 现在我尝试使用Vectors.sparse生成一个大的特征向量,但是特征大小可能超过40亿,超过了int的最大值,所以我想使用BigInt或Long type来处理它 但是我阅读了向量的代码和文档。sparse只支持int作为大小类型,为什么要将其限制为int?我怎样才能绕过这个限制呢 为什么将其限制为int 因为这是Java数组大小的硬限制。由于稀疏向量使用数组来存储索引值,所以它不能太大 我怎样才能绕过这个限制呢 除非您想重写SparseVector实现

我需要处理大量数据,我使用spark

现在我尝试使用
Vectors.sparse
生成一个大的特征向量,但是特征大小可能超过40亿,超过了int的最大值,所以我想使用BigInt或Long type来处理它

但是我阅读了
向量的代码和文档。sparse
只支持int作为大小类型,为什么要将其限制为int?我怎样才能绕过这个限制呢

为什么将其限制为int

因为这是Java数组大小的硬限制。由于稀疏向量使用数组来存储索引值,所以它不能太大

我怎样才能绕过这个限制呢


除非您想重写
SparseVector
实现,否则不太可能。实际上,拥有数十亿个功能(你是如何做到的?)意味着更严重的问题。并非所有向量操作都能保持稀疏性,更不用说大多数线性代数库都不能这样处理。

是的,我阅读了代码,意识到我需要几天的时间来修改它。2。我们的应用程序拥有1000多万用户,数百个主题(如技术、军事等),我想知道用户最喜欢的主题,所以我跨越了用户和主题(~1000万*~400)。我错了吗?我在这方面没有太多的经验,请指出我是否错了。在这种情况下,一个自然的表示形式是一个有10M行/400列的矩阵+一些类似ALS的算法。我看不出长度为100M*400的单个向量有任何用处……是的,这可能是用户的结果(模型权重),但我需要使用用户的访问日志来训练模型,原始输入类似于“标签,用户,项目,主题”,交叉输入后类似于“标签,用户,项目,主题,用户x主题”我的最终目的是估计任何项目的ctr,因此我使用交叉功能,并且我以前对每个用户都进行过培训,单个用户模型的主题功能是有效的,所以我想交叉功能并在这里使用它。