如何在 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组合环境