【发布时间】:2015-12-31 08:14:10
【问题描述】:
挑战: 数据是 [(u, p), (u, p), ...] 形状的 RDD,其中 u 和 p 都是字符串。我具有挑战性的期望输出是 [((p,p), u), ..] 其中每个元素中的键是共享一个 u 的所有 p 的组合。
已经尝试过:
- 使用笛卡尔和过滤器模拟组合。
- 尝试在 Python 中对每个元素使用 itertools.combinations,然后使用 flatMap,如下所示:
[(tuple(sorted(e)), x[0]) for e in combinations(x[1].split(','),2)])
我已经尝试过的问题是执行程序节点似乎下降了,可能是由于内存消耗。
有什么建议吗?
编辑
以下是该问题的更多信息和背景:
我正在寻找每两个“p”的交集的重叠计数/基数,其中“p”是集合 ID,“u”是集合的成员。
输入是“p”和“u”之间关系记录的巨大列表,例如:
[(u1,p1), (u2, p2), (u1, p2), (u2, p1), (u1, p3)]
所需的输出是:[((p1,p2), 2), ((p1, p3), 1), ((p2, p3), 1)]
(注意组合而不是排列)
关于输入数据的更多细节:
- 有 50k - 100k 个不同的“p”。
- 一个“p”可以有几亿个唯一的“u”。
- 可能有重复的输入数据行。换句话说,
(u,p)的多个实例,但在将“u”列表视为交集步骤中给定“p”的集合时,这并没有改变问题。
至于硬件,我在 EMR(Yarn 上的 Spark 1.3.1)上使用了大约 41 个 m3.xlarges,并以这种方式启动了外壳:
./pyspark --master yarn-client --driver-memory 4G --executor-memory 3G --num-executors 160
【问题讨论】:
-
请编辑您的问题以包括您的确切目标(您在 cmets 中描述的目标)、示例输入和预期输出。有关数据量、统计数据(每个 u 的不同 p 的平均数量)和配置的一些详细信息也可能很有用。
-
当然,我已经完成了请求的更新。如果您需要更多信息,请告诉我
-
谢谢。澄清一下 - 一个 p 可以有几亿个独特的“u”?另外,您需要一个精确的解决方案还是可以接受一个近似值?
-
一个 p 可以有几亿个唯一的 "u"s - 也就是说集合 "p" 在该集合(集合/集合的每个成员都用“u”表示)。我正在寻找一个确切的解决方案。我已经有一个可以在一台机器上运行的精确解决方案,但我开始超出它,并希望分发它以使其具有可扩展性。
标签: python apache-spark pyspark