1

我有一个包含 3 个字段的 RichPipe:名称:字符串、时间:长和值:整数。我需要获取特定名称、时间对的值。我该怎么做?我无法从烫伤文档中弄清楚,因为它非常神秘,找不到任何这样做的例子。

4

1 回答 1

3

那么 aRichPipe不是键值存储,这就是为什么没有关于用作键值存储的文档的原因 :) ARichPipe应该被认为是一个管道 - 所以你不能在没有先进入的情况下获取中间的数据在一端并遍历管道,直到找到所需的元素。此外,这在 Scalding 中有点痛苦,因为您必须将结果写入磁盘(因为它构建在 Hadoop 之上),然后从磁盘读取结果才能在您的应用程序中使用它。所以代码将是这样的:

myPipe.filter[String, Long](('name, 'time))(_ == (specificName, specificTime))
.write(Tsv("tmp/location"))

然后,您将需要一些更高级别的代码来运行作业并将数据读回内存以获得结果。与其写出所有代码来执行此操作(这非常简单),不如提供更多关于您的用例是什么以及您正在尝试做什么的上下文 - 也许您可以在 Map-Reduce 下解决您的问题编程模型。

或者,使用 Spark,您将遇到必须遍历分布式数据集的相同问题,但您没有写入磁盘并再次读取的麻烦。此外,您可以使用自定义分区器是 Spark,这可能会导致类似键值存储的行为。但无论如何天真地,代码将是:

val theValueYouWant = 
  myRDD.filter {
    case (`specificName`, `specificTime`, _) => true
    case _ => false
  }
  .toArray.head._3
于 2014-07-17T09:44:58.127 回答