【发布时间】:2020-05-26 17:05:31
【问题描述】:
我正在尝试透视数据并生成用于建模的用户-项目交互矩阵。 我一直将其作为 AWS Glue Spark 作业执行。
在我的示例中,我有 53,000 名客户购买了超过 1,000,000 种不同的产品。这将产生一个包含约 530 亿个细胞的交互矩阵。它看起来像这样:
clientID ProductID Purchased
1 1 1
1 2 1
2 1 1
2 3 1
3 2 1
N.B. Purchased is a tinyint dummy indicating if a customer bought a product.
There are no rows for when a customer has not purchased.
目前我一直在使用以下代码:
pivot = df.groupby("clientid").pivot("productid").agg(max("Purchased"))
现在,我已经允许这项工作在 150 个节点(四核 16GB 节点)上运行超过 2 天,但仍然没有任何可显示的内容。这让我非常清楚这样做的成本,特别是考虑到这是一个人口样本,并且在未来这将需要扩大到超过一百万的客户。
有人可以确认是否有一种计算效率更高的方法来执行上述操作并向我解释一下吗?
感谢您提前提供的任何帮助。如果您需要任何详细信息,请告诉我。
【问题讨论】:
-
@mazaneicha 确实可以这样做以帮助进行样本计算,但从长远来看将无法正常工作,因为完整的数据集大致具有 clientIDs = ProductIDs
-
抱歉,53K 客户与 1M 产品让您感到兴奋...如果您希望您的客户群也增长到 MM,我想最好开始关注
glom()ing分区并构建稀疏矩阵以进行分析。
标签: apache-spark pyspark etl aws-glue