从richpipe获取值

bq8i3lrv  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(438)

我有一个richpipe,它有3个字段:name:string、time:long和value:int。我需要获取一个特定名称time对的值。我该怎么做?我无法从滚烫的文档中找到它,因为它非常神秘,找不到任何这样做的例子。

idfiyjo8

idfiyjo81#

好吧a RichPipe 不是键值存储,这就是为什么没有关于用作键值存储的文档:)a RichPipe 应该被认为是一个管道-因此,如果不先从一端进入并遍历管道,直到找到要查找的元素,就无法获取中间的数据。此外,这在烫伤中有点痛苦,因为您必须将结果写入磁盘(因为它构建在hadoop之上),然后从磁盘读取结果,以便在应用程序中使用它。所以代码是这样的:

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

然后需要一些更高级别的代码来运行作业,并将数据读回内存以获得结果。与其写下所有的代码来做这件事(这很简单),不如给一些关于你的用例是什么以及你正在尝试做什么的上下文——也许你可以在map-reduce编程模型下解决你的问题。
或者,使用spark,您也会遇到同样的问题,即必须遍历分布式数据集,但您没有写入磁盘并再次读取的麻烦。此外,您还可以使用自定义分区器is spark,这可能导致类似于键值存储的行为。但不管怎么说,代码应该是:

val theValueYouWant = 
  myRDD.filter {
    case (`specificName`, `specificTime`, _) => true
    case _ => false
  }
  .toArray.head._3

相关问题