Hive テーブルの列の 1 つに、キーと値のペアを格納したいと考えています。Hive の複雑なデータ型マップは、その構造をサポートしています。
(これは、私ができるようにしたいことのおもちゃの例にすぎません。このように圧縮したい列が他にもたくさんあります)
だから私はこのようなテーブルを作成します:
hive>DESCRIBE transaction_detailed;
OK
id STRING
time STRING
Time taken: 0.181 seconds
hive>DROP TABLE IF EXISTS transactions;
hive>CREATE EXTERNAL TABLE transactions(
id STRING,
time_map MAP<STRING, INT>
)
partitioned by (dt string)
row format delimited fields terminated by '\t' collection items terminated by ',' map keys terminated by ':' lines terminated by '\n'
location 's3://my_loaction/transactions/';
次に、コードで説明されているように、リデューサーを使用してマップ列を読み込もうとします: time_map の構造は次のようになります: {"min": time, "max": time, "average": time, "total":時間}
hive>FROM( FROM transaction_detailed
MAP transaction_detailed.id, transaction_detailed.time
USING "python unity mapper -- splits the same thing out as it takes it"
AS id, time
cluster by id) transaction_time_map
insert overwrite table transactions partition(dt="2013-27-03")
REDUCE transaction_time_map.id, transaction_time_map.time
USING "python reducer which takes time_stamp sequence for a single id and summarizes them using min, max, average and total and supposed to insert into map"
as id, time_map;
しかし、次のようなエラーが発生します。
FAILED: Error in semantic analysis: Line 6:23 Cannot insert into target table because column number/types are different "two_day": Cannot convert column 8 from string to map<string,int>.
Python reducer を使用してマップ列にロードするにはどうすればよいですか?