2014-10-30 42 views
0

语境:groupByKey与数百万行的关键

  • 聚集者皆具有潜在的数百万行的关键。
  • 在行中添加要素。要做到这一点,我们必须知道前一行(按键和时间戳)。目前我们使用groupByKey并在Iterable上进行工作。

我们尝试:

  • 添加更多的内存给执行程序/驱动器
  • 更改分区

更改允许执行人/驱动器工作内存的数量。它只能用于关键的10k或100k行。关于将来可能发生的关键数百万行的情况。

似乎没有对那种问题的一些工作:https://github.com/apache/spark/pull/1977

但它是专用于PySpark而不是我们使用Scala的API目前

我的问题是:

  • 我知道我必须专门在PySpark中工作,等待处理这种类型的 问题的新功能是否更好?
  • 另一个解决方案是使用一些特定的键和值来处理我的需求,从而实现不同的工作流程。任何设计模式。例如,需要通过按键和按时间戳来添加提前预置行?

回答

1

我认为这个问题的变化只是让PySpark的工作更像主要的API。无论如何,您可能不希望设计一个每个键都需要大量值的工作流程。除了以不同的方式设计外,没有其他解决方案。

我还没有尝试过这一点,并且只能相当肯定这种行为是有保证的,但是,也许你可以在整个数据集上使用sortBy时间戳,然后使用foldByKey。您提供了一个将前一个值合并到下一个值中的函数。这应该通过时间戳来遇到数据。所以你每次看t行,t + 1,每增加一行就可以返回第t + 1行。

+0

Thx为答复肖恩。不知道关于foldByKey,我会尝试。问题依然存在,用于通过密钥对所有数据进行聚合。我不知道该怎么做。 – jnaour 2014-10-30 12:42:51

+0

对于我只需要前一个元素的部分,在搜索之后,可以使用zipWithIndex来连接两个RDD:索引和索引+ 1,这样我就可以在一行中获得所需的所有数据。很多过程需要一个简单的需求,但我不确定是否有更好的解决方案... – jnaour 2014-10-30 13:50:20