如何在 Spark .NET 中执行分布式组合(N 选择 K)?

Posted

技术标签:

【中文标题】如何在 Spark .NET 中执行分布式组合(N 选择 K)?【英文标题】:How to perform distributed combinatorial (N choose K) in Spark .NET? 【发布时间】:2020-08-13 05:43:19 【问题描述】:

我有一个项目,其中我有大量 C(100,20) 个组合,每个组合集都要做少量工作。

我正在使用带有 Visual Studio 的 Spark .NET 作为我的技术(请参阅下面的设置): https://docs.microsoft.com/en-us/dotnet/spark/tutorials/get-started

Spark .NET 有一个带有 SQL 类型命令的数据框。我假设我需要执行 SQL 类型命令来创建 N 选择 K 组合,并使用用户定义的工作函数来处理组合。

问题是使用带有 DataFrame 的 Spark .NET 的代码是什么样的?如果 DataFrame 不支持 N 选择 K 选项,是否还有其他选项可以保持组合的生成分布?

【问题讨论】:

哇,那是535,983,370,403,809,682,970 的组合……你可能需要一台量子计算机…… 也许这是一个延伸目标,但现在我正在尝试找出 Spark .NET N 选择可以正确分发的 K 代码。 您知道,如果您可以在 1 毫秒内处理一个组合,那么处理所有 C(100,20) 组合将需要将近 170 亿年! @Enigmativity,您的 cmets 无助于解决 Spark .NET N 选择 K 代码解决方案,这是主要问题。此部署将被推送到 Azure Databricks 以进行大规模分布式计算。延伸目标旨在使用更合理的集合来评估成本和性能。如果您想要更大的数字,我确实有一个客户案例是 C(500,20)。客户不在乎数量有多大,他们只想知道他们是否负担得起:) 现在太疯狂了。你已经超过 8,400 万亿年。我想你可能在没有计算数字的情况下不小心把第一个C(100,20) 扔了进去。但是要说C(500,20) 有实际的客户需求是荒谬的。你不可能试图让它对这些数字起作用。如果您可以合理地解决问题,那么您就更有可能得到答案。 【参考方案1】:

spark dotnet github 专区回答了我的基本问题

https://github.com/dotnet/spark/issues/627

通过在两个数据帧上使用交叉连接,我能够创建组合。这可能不是最好的方法,也许其他人会跟进一个更好的解决方案。

对于 N 选择 K,这将是使用 N 集合的 K 个交叉连接。

【讨论】:

以上是关于如何在 Spark .NET 中执行分布式组合(N 选择 K)?的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop(伪分布式)+Spark(local模式)搭建Hadoop和Spark组合环境

spark 能执行udf 不能执行udaf,啥原因

谈Spark下并行执行多个Job的问题

谈Spark下并行执行多个Job的问题

6 - 教你如何使用Spark分布式执行Python脚本计算数据

深度剖析Spark分布式执行原理