我正在使用Graphchi的pagerank示例:https://github.com/GraphChi/graphchi-cpp/wiki/Example-Apps#pagerank-easy
示例应用程序编写了一个包含顶点信息的二进制文件,我希望读取/转换为一个计划文本文件(稍后调用R或其他语言)。
文件指出:
"GraphChi将在二进制文件中写入边的值,这在其他程序中很容易处理。包含顶点值的文件名为GRAPH-NAME.4B.vout。这里"4B“指的是4字节类型(浮点)的顶点值。”
“易于处理”部分是我正在挣扎的地方--我有高级语言的经验,但没有C++或处理二进制文件的经验。通过搜索堆栈溢出,我发现了一些东西,但是在阅读这个文件时没有运气。理想情况下,这可以通过bash或python来完成。
非常感谢你在这方面的帮助。
更新:hexdump graph-name.4B.vout | head -5提供:
0000000 999a 3e19 7468 3e7f 7d2a 3e93 d8e0 3ec4 0000010 cec6 3fe4 d551 3f08 eff2 3e54 999a 3e19 0000020 999a 3e19 3690 3e8c 0080 3f38 9ea3 3ef5 0000030 b7d6 3f66 999a 3e19 10e3 3ee1 400c 400d 0000040 a3df 3e7c 999a 3e19 979c 3e91 5230 3f18
发布于 2015-02-08 21:19:49
下面是如何使用GraphCHi将输出写成字符串的示例代码:https://github.com/GraphChi/graphchi-cpp/wiki/Vertex-Aggregators
但是数组是简单的字节数组。下面是如何在python中读取它的示例:
import struct
from array import array as binarray
import sys
inputfile = sys.argv[1]
data = open(inputfile).read()
a = binarray('c')
a.fromstring(data)
s = struct.Struct("f")
l = len(a)
print "%d bytes" %l
n = l / 4
for i in xrange(0, n):
x = s.unpack_from(a, i * 4)[0]
print ("%d %f" % (i, x))发布于 2015-02-09 22:52:15
我也遇到了同样的麻烦。幸运的是,我和一群帮助我的网络工程师一起工作!在Mac上,下面的命令用于每节点一行打印4B.vout数据,其整数值与摘要文件中给出的整数值相同。如果您的文件名为eg,filename.4B.vout,那么一些命令行perl就会得到:
cat filename.4B.vout LANG= per-0777 -e '$,=“\n\”;打印解包(\“L*\\”,<>),\"\";‘
编辑补充:这是为连接的组件ID和社区ID的分配,隐式地写第一行是标记为0的节点的ID,第2行是标记为1等的节点。但是我在这里复制,所以我不确定它需要如何更改浮点数。它对每个节点的整数值都很有用。
https://stackoverflow.com/questions/28349805
复制相似问题