问题,跨KV(NoSql/Redis)目标迭代

6rqinv9w  于 2023-04-19  发布在  Redis
关注(0)|答案(2)|浏览(121)

我想在MLRun中迭代交叉KV(NoSql,Redis)Target,而不指定主键,但我只看到基于特定键获取特定KV项的能力。我必须只使用唯一项,而不是重复项。
我选择了NoSql/Redis Target,因为内存中的键操作对于快速响应(基于特定键)至关重要,但有时我必须迭代整个键集合(这就是这个问题的情况)。
你可以看到我的代码的一部分,基于键获取值:

import mlrun 
import mlrun.feature_store as fs
...

svc=fs.get_online_feature_service(fs.FeatureVector("myVector", ["client.*"]))
resp = svc.get([{"cuid": 1926, "key1": 100023}])

你知道MLRun CE/付费版(1.2.1版)中如何在KV(NoSql,Redis)目标中迭代交叉项吗?

bprjcwpo

bprjcwpo1#

我正在KV存储中使用这些迭代交叉键的解决方案:

1. NoSqlTarget

通过v3io进行迭代(它不是MLRun API的纯部分,但它是MLRun分发包的一部分)。有关v3io python SDK see和跨KV项迭代(游标使用)的更多信息,请参见示例

import v3io.dataplane

v3io_client = v3io.dataplane.Client(endpoint='https://v3io-webapi:8081', access_key='some_access_key')

# create a query, and use an items cursor to iterate the results
items_cursor = v3io_client.kv.new_cursor(container='users',
                                         table_path='/user-profile',
                                         attribute_names=['income'],
                                         filter_expression='income > 150')

# print the output
for item in items_cursor.all():
    print(item)

顺便说一句:NoSqlTarget仅适用于MLRun企业版

2. RedisTarget

你可以使用轻松迭代跨KV项,它是Redis API的一部分

import redis

r = redis.StrictRedis(host='localhost', port=6379, db=0)
for key in r.keys('*'):
    r.delete(key)

也可以通过redis-cli使用命令行,参见示例:

redis-cli keys users*

或根据密钥列表从redis中删除特定密钥:

redis-cli keys users* | xargs redis-cli del

顺便说一句:RedisTarget可用于MLRun CE和企业版

kyxcudwk

kyxcudwk2#

NoSqlTarget使用KV存储,它本质上是用于基于给定键检索单个值。如果您希望检索整个特征向量,则应该使用离线存储。更多信息请参见MLRun文档
或者,您可以使用离线商店来获取密钥列表,然后使用以下内容查询在线商店:

import mlrun.feature_store as fstore

df = fstore.get_offline_features("my-vec").to_dataframe()
keys = list(resp.to_dataframe().index.unique())

svc = fstore.get_online_feature_service("my-vec")
svc.get([{"my-key" : key} for key in keys[:5]])

相关问题