我正在使用Graphchi的pagerank示例:https://github.com/GraphChi/graphchi-cpp/wiki/Example-Apps#pagerank-easy
示例应用程序写入一个二进制文件,其中包含我想要读取/转换为计划文本文件的顶点信息(稍后调用R或其他语言)。
文件说明:
" GraphChi将在二进制文件中写入边的值,这在其他程序中很容易处理。包含顶点值的文件的名称是GRAPH-NAME.4B.vout。这里" 4B"指的是顶点值是一个4字节的类型(浮点数)。"
易于处理'部分是我正在努力的 - 我有高级语言但没有C ++或处理二进制文件的经验。我通过搜索stackoverflow找到了一些东西但是在阅读这个文件时没有运气。理想情况下,这将通过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
答案 0 :(得分:1)
以下是如何使用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))
答案 1 :(得分:0)
我遇到了同样的麻烦。幸运的是,我与一群帮助我的网络工程师合作!在Mac Linux上,以下命令用于将4B.vout数据打印到每个节点一行,整数值与摘要文件中给出的值相同。如果您的文件被调用,例如filename.4B.vout,那么perl的一些命令行可以获得:
cat filename.4B.vout | LANG = perl -0777 -e' $,= \" \ n \&#34 ;;打印解压缩(\" L * \",<>),\" \";'
编辑添加:这是用于连接组件ID和社区ID的分配,隐式写入第1行是标记为0的节点的ID,第2行是标记为1的节点等。但是我这里是copypasting所以我不知道如何更换花车。它适用于每个节点的整数值。