我有一个richpipe,它有3个字段:name:string、time:long和value:int。我需要获取一个特定名称time对的值。我该怎么做?我无法从滚烫的文档中找到它,因为它非常神秘,找不到任何这样做的例子。
idfiyjo81#
好吧a RichPipe 不是键值存储,这就是为什么没有关于用作键值存储的文档:)a RichPipe 应该被认为是一个管道-因此,如果不先从一端进入并遍历管道,直到找到要查找的元素,就无法获取中间的数据。此外,这在烫伤中有点痛苦,因为您必须将结果写入磁盘(因为它构建在hadoop之上),然后从磁盘读取结果,以便在应用程序中使用它。所以代码是这样的:
RichPipe
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
1条答案
按热度按时间idfiyjo81#
好吧a
RichPipe
不是键值存储,这就是为什么没有关于用作键值存储的文档:)aRichPipe
应该被认为是一个管道-因此,如果不先从一端进入并遍历管道,直到找到要查找的元素,就无法获取中间的数据。此外,这在烫伤中有点痛苦,因为您必须将结果写入磁盘(因为它构建在hadoop之上),然后从磁盘读取结果,以便在应用程序中使用它。所以代码是这样的:然后需要一些更高级别的代码来运行作业,并将数据读回内存以获得结果。与其写下所有的代码来做这件事(这很简单),不如给一些关于你的用例是什么以及你正在尝试做什么的上下文——也许你可以在map-reduce编程模型下解决你的问题。
或者,使用spark,您也会遇到同样的问题,即必须遍历分布式数据集,但您没有写入磁盘并再次读取的麻烦。此外,您还可以使用自定义分区器is spark,这可能导致类似于键值存储的行为。但不管怎么说,代码应该是: