我有一个带有3个字段的RichPipe:名称:字符串,时间:Long和值:Int。我需要获取特定名称,时间对的值。我该怎么做?我无法从缩放文档中找出答案,因为它非常神秘,找不到任何执行此操作的示例。

最佳答案

好吧,RichPipe不是键值存储,这就是为什么没有文档用作键值存储的原因:) RichPipe应该被认为是管道-因此,没有先就不能获得中间的数据一端插入并遍历管道,直到找到所需的元素。此外,这在扩展方面有些痛苦,因为您必须将结果写入磁盘(因为它是基于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

关于scala - 从RichPipe获取值(value),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24798799/

10-12 23:03