Python 计算h2o帧的散列
我想计算Python 计算h2o帧的散列,python,r,h2o,Python,R,H2o,我想计算h2o.frame.H2OFrame的一些散列值。理想情况下,在R和python中。我对h2o.frame.H2OFrame的理解是,这些对象基本上是在h2o服务器上“活动”的(即,由一些Java对象表示),而不是在R或python中上载它们 我想计算“尽可能接近”实际训练算法的散列值。这就排除了对底层R或python对象以及从中加载数据的任何底层文件的哈希值(序列化)的计算。 这样做的原因是我想捕获h2o的上传函数对底层数据执行的所有(可能)更改 根据推断,不存在通过h2o.frame
h2o.frame.H2OFrame
的一些散列值。理想情况下,在R
和python
中。我对h2o.frame.H2OFrame
的理解是,这些对象基本上是在h2o
服务器上“活动”的(即,由一些Java
对象表示),而不是在R
或python
中上载它们
我想计算“尽可能接近”实际训练算法的散列值。这就排除了对底层R
或python
对象以及从中加载数据的任何底层文件的哈希值(序列化)的计算。
这样做的原因是我想捕获h2o
的上传函数对底层数据执行的所有(可能)更改
根据推断,不存在通过h2o.frame.H2OFrame
公开的类似散列的功能。
实现h2o
数据的散列式摘要的一种可能性是对所有数字列求和,并对分类列执行类似的操作。然而,我真的希望在我的散列函数中有一些雪崩效应,这样函数输入中的小变化会导致输出的大差异。这一要求排除了简单求和之类的情况
是否已经有一些我可能忽略的接口?
如果没有,我如何完成上述任务
import h2o
h2o.init()
iris_df=h2o.upload_file(path="~/iris.csv")
# what I would like to achieve
iris_df.hash()
# >>> ab2132nfqf3rf37
# ab2132nfqf3rf37 is the (made up) hash value of iris_df
感谢您的帮助。它在REST API中可用(请参见屏幕截图),您也可以在Python中的H2OFrame对象中访问它,但它不是直接公开的。它在REST API中可用(请参见屏幕截图)您可能也可以在Python中的H2OFrame对象中找到它,但它不是直接公开的。因此,这里是一个基于Michal Kurka和Tom Kraljevic建议的Python完整解决方案:
import h2o
import requests
import json
h2o.init()
iris_df=h2o.upload_file(path="~/iris.csv")
apiEndpoint="http://127.0.0.1:54321/3/Frames/"
res=json.loads(requests.get(apiEndpoint+iris_df.frame_id).text)
print("Checksum 1: ",res["frames"][0]["checksum"])
#change a bit
iris_df[0,1]=iris_df[0,1]+1e-3
res=json.loads(requests.get(apiEndpoint+iris_df.frame_id).text)
print("Checksum 2: ", res["frames"][0]["checksum"])
h2o.cluster().shutdown()
这给
Checksum 1: 8858396055714143663
Checksum 2: -4953793257165767052
谢谢你的帮助 下面是一个基于Michal Kurka和Tom Kraljevic建议的完整python解决方案:
import h2o
import requests
import json
h2o.init()
iris_df=h2o.upload_file(path="~/iris.csv")
apiEndpoint="http://127.0.0.1:54321/3/Frames/"
res=json.loads(requests.get(apiEndpoint+iris_df.frame_id).text)
print("Checksum 1: ",res["frames"][0]["checksum"])
#change a bit
iris_df[0,1]=iris_df[0,1]+1e-3
res=json.loads(requests.get(apiEndpoint+iris_df.frame_id).text)
print("Checksum 2: ", res["frames"][0]["checksum"])
h2o.cluster().shutdown()
这给
Checksum 1: 8858396055714143663
Checksum 2: -4953793257165767052
谢谢你的帮助 如果我没记错的话,在java端已经有类似的计算了。我认为在后端使用它的部分原因是为了跟踪是否已经为一个帧计算了像min/max/mean这样的rollupstats。如果手动查看rest api json响应,您可能会发现它。我现在已经查看了
importfile
和PostFile
/ParseSetup
的rest api响应。所有这些都不包含任何类似哈希的内容。顺便说一句:我通过flow web界面和Chrome开发者工具查看了它。我们确实公开了校验和字段,这似乎是您要查找的内容:它在REST API中返回。@TomKraljevic抱歉,可能误解了您的评论,并认为我会得到一个json(带有校验和)直接作为对ImportFiles
或PostFile
的响应。如果我没记错的话,java端已经有类似的计算了。我认为在后端使用它的部分原因是为了跟踪是否已经为一个帧计算了像min/max/mean这样的rollupstats。如果手动查看rest api json响应,您可能会发现它。我现在已经查看了importfile
和PostFile
/ParseSetup
的rest api响应。所有这些都不包含任何类似哈希的内容。顺便说一句:我通过flow web界面和Chrome开发者工具查看了它。我们确实公开了校验和字段,这似乎是您要查找的内容:它在REST API中返回。@TomKraljevic抱歉,可能误解了您的评论,并认为我会得到一个json(带有校验和)直接作为对importfile
或PostFile
的响应。