【发布时间】:2015-06-23 17:52:12
【问题描述】:
我们正在使用以下命令使用 Pyspark 读取 Hbase 表。
from pyspark.sql.types import *
host=<Host Name>
port=<Port Number>
keyConv = "org.apache.spark.examples.pythonconverters.ImmutableBytesWritableToStringConverter"
valueConv = "org.apache.spark.examples.pythonconverters.HBaseResultToStringConverter"
cmdata_conf = {"hbase.zookeeper.property.clientPort":port, "hbase.zookeeper.quorum": host, "hbase.mapreduce.inputtable": "CMData", "hbase.mapreduce.scan.columns": "info:Tenure info:Age"}
cmdata_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=cmdata_conf)
output = cmdata_rdd.collect()
output
我得到的结果如下。 (钥匙和年龄)
[(u'123', u'5'), (u'234', u'4'), (u'345', u'3'), (u'456', u'4'), (u'567', u'7'), (u'678', u'7'), (u'789', u'8')]
相反,我期待 Key、Tenure 和 Age。如果我只有 Tenure 列,那么它会返回 Key 和 Tenure。但如果添加更多列,结果总是有 Key 和 Age 列。
谁能帮我们解决这个问题?
注意:我们是这个工具的新手
提前谢谢你。
【问题讨论】:
-
这个例子可能会有所帮助gist.github.com/2353b5da5099e24da111.git如果您还有任何问题请联系我
-
嗨,Anant,感谢您的回复,但是当我点击该链接时,我只能看到一个空白页:(
-
抱歉你需要 git clone 或者你也可以使用gist.github.com/anantasty/2353b5da5099e24da111
-
当我尝试从 HBase 查询多个列时遇到了同样的问题。我相信使用
valueConv = "org.apache.spark.examples.pythonconverters.HBaseResultToStringConverter"是它出错的地方。我们应该从 HBase 中获取一个列表 / 可迭代对象作为值,但不知何故,只有这些 Java 可迭代对象的最后一个条目被转换为 python 字符串。这应该是一张错误票。
标签: python hadoop hbase bigdata pyspark