Hbase apachepig:动态列
我有一个数据集(CSV),它有三个带值的值列(v1、2和3)。值的描述以逗号分隔的字符串形式存储在“keys”列中Hbase apachepig:动态列,hbase,apache-pig,Hbase,Apache Pig,我有一个数据集(CSV),它有三个带值的值列(v1、2和3)。值的描述以逗号分隔的字符串形式存储在“keys”列中 | v1 | v2 | v3 | keys | | A | C | E | X,Y,Z | 使用Pig,我希望将此信息加载到HBase表中,其中列族是C,列限定符是键 | C:X | C:Y | C:Z | | A | C | E | 以前是否有人这样做过,并愿意分享这些知识 另一个选项是在HBase列中存储映射(key#value)。但我不确定这对于查询数
| v1 | v2 | v3 | keys |
| A | C | E | X,Y,Z |
使用Pig,我希望将此信息加载到HBase表中,其中列族是C,列限定符是键
| C:X | C:Y | C:Z |
| A | C | E |
以前是否有人这样做过,并愿意分享这些知识
另一个选项是在HBase列中存储映射(key#value)。但我不确定这对于查询数据是否灵活?这是处理多结构模式时的常见问题。如果你真的想尝试这种地图类型,那么这是一个坏主意
你可以用MapReduce试试这个。MapReduce是最好的解决方案 找到了解决我问题的方法 测试。清管器:
REGISTER data.py using jython as myfuncs
A = LOAD 'data' using PigStorage('|') AS (
id:chararray,
date:chararray,
v1:chararray,
v2:chararray,
v3:chararray,
keys:chararray,
);
B = FOREACH A {
GENERATE
id,
date,
myfuncs.dataToMap(STRSPLIT(keys, ','), TOTUPLE(v1, v2, v3)) as kv;
}
STORE B INTO 'pig_table' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage( 'e:date kv:*' );
import org.apache.pig.data.DataType as DataType
import org.apache.pig.impl.logicalLayer.schema.SchemaUtil as SchemaUtil
@outputSchema("ud:map[]")
def dataToMap(keys, values):
result = dict()
keys = list(keys)
values = list(values)
try:
while True:
values.remove(None)
except ValueError:
pass
for idx in range(len(keys)):
result[keys[idx]] = values[idx]
return result
data.py:
REGISTER data.py using jython as myfuncs
A = LOAD 'data' using PigStorage('|') AS (
id:chararray,
date:chararray,
v1:chararray,
v2:chararray,
v3:chararray,
keys:chararray,
);
B = FOREACH A {
GENERATE
id,
date,
myfuncs.dataToMap(STRSPLIT(keys, ','), TOTUPLE(v1, v2, v3)) as kv;
}
STORE B INTO 'pig_table' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage( 'e:date kv:*' );
import org.apache.pig.data.DataType as DataType
import org.apache.pig.impl.logicalLayer.schema.SchemaUtil as SchemaUtil
@outputSchema("ud:map[]")
def dataToMap(keys, values):
result = dict()
keys = list(keys)
values = list(values)
try:
while True:
values.remove(None)
except ValueError:
pass
for idx in range(len(keys)):
result[keys[idx]] = values[idx]
return result
谢谢你的回答。你们有没有可能提供更多的细节或例子?你们想要MapReduce的例子?我还是喜欢用pig来解决这个问题,但我会给MR一个尝试。你有例子吗?