【发布时间】:2016-10-29 20:24:52
【问题描述】:
标题中的问题可能无法反映我到底想要什么……我会在这里尽力而为。
我将以下十六进制字符串表示为字节字符串:
s='\x00\x00\x01b?\x90bM\xe0\x00\x00\x00'
我有一个 hbase 表,其中行键的格式与“s”相同。但是当我以这种格式传递范围时会产生错误:"utf-8 cannot decode byte..."
sparkconf = {"hbase.zookeeper.quorum": "myHostIP","hbase.mapreduce.inputtable": "myHbaseTable","hbase.mapreduce.scan.columns": "c1:c2", "hbase.mapreduce .scan.row.start": startRow, "hbase.mapreduce.scan.row.stop": endRow}
好像 startRow 和 endRow 必须是字符串?
如果是这样,有没有办法将 s='\x00\x00\x01b?\x90bM\xe0\x00\x00\x00' 格式化/转换为一串相同的字符?
我的意思不是转换 Hex t 字符串,我的意思是我需要一个字符串,例如 str_s=MAKESTRING(s) 会导致 str_s='\x00\x00 \x01b?\x90bM\xe0\x00\x00\x00' 其中 str_s[0]='\'、str_s[1]='x'、str_s[2]='0' 等。 ..
非常感谢您的帮助,我是 python、pyspark 和 hbase 的新手。
【问题讨论】:
-
你的字符串是从哪里来的?你会以某种方式生成它吗?
-
是的,前 4 个字节是 int,后 8 个字节是 double。所以,确切的问题是:不清楚 hbase_rdd = sc.newAPIHadoopRDD("org.apache.hadoop.hbase.mapreduce.TableInputFormat","org.apache.hadoop.hbase.io.ImmutableBytesWritable","org.apache .hadoop.hbase.client.Result",keyConverter=keyConv,valueConverter=valueConv,conf=sparkconf) 正在解释开始行和结束行。我已经解决了 utf-8 问题,如下所示: s=u'\x00\x00\x01b?\x90bM\xe0\x00\x00\x00' s=s.encode('utf-8') 但我越来越空了从范围扫描设置!感谢您的帮助
-
当我在扫描中使用来自 hbase shell 的相同范围(开始和结束)和相同格式时,它可以工作,但不能使用 newAPIHadoopRDD!
标签: python string hex hbase pyspark