如何在 Hive 中进行配对?
How to do Pairing in Hive?
- 首先我们通过加载以下 csv 文件
创建一个配置单元 table
$cat data.csv
ID,City,Zip,Flag
1,A,95126,0
2,A,95126,1
3,A,95126,1
4,B,95124,0
5,B,95124,1
6,C,95124,0
7,C,95127,1
8,C,95127,0
9,C,95127,1
(a) 其中 "ID" 以上是主键(唯一),
(b)对于每个"City"和"Zip"组合,max中有一个ID,Flag=0;而对于每个 "City" 和 "Zip" 组合,它可以包含多个带有 Flag=1 的 ID。
(c) 标志可以是 0 或 1
- 将上面的 csv 文件加载到配置单元 table
create table test(ID string, City String, Zip String, Flag int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "," ;
LOAD DATA LOCAL INPATH "./data.csv" OVERWRITE INTO TABLE test;
- 对于每个 Flag=0 的 ID,我们希望将其与另一个 Flag=1 但具有相同城市 - 邮政编码的 ID 配对。如果找不到另一个带有 Flag=1 和匹配的 City-Zip 的配对 ID,我们就删除该记录。
这是预期结果:
ID,City,Zip,Flag
1,A,95126,0
2,A,95126,1
4,B,95124,0
5,B,95124,1
7,C,95127,1
8,C,95127,0
关于如何在 Hive 或 Python 中进行配对的任何有价值的提示?
试试这个。
select t2.*
FROM
test t1 INNER JOIN test t2
ON t1.City != t2.City
AND t1.Zip != t2.Zip
AND t1.Flag != t2.Flag
AND t1.ID<t2.ID
- 首先我们通过加载以下 csv 文件 创建一个配置单元 table
$cat data.csv ID,City,Zip,Flag 1,A,95126,0 2,A,95126,1 3,A,95126,1 4,B,95124,0 5,B,95124,1 6,C,95124,0 7,C,95127,1 8,C,95127,0 9,C,95127,1
(a) 其中 "ID" 以上是主键(唯一),
(b)对于每个"City"和"Zip"组合,max中有一个ID,Flag=0;而对于每个 "City" 和 "Zip" 组合,它可以包含多个带有 Flag=1 的 ID。
(c) 标志可以是 0 或 1
- 将上面的 csv 文件加载到配置单元 table
create table test(ID string, City String, Zip String, Flag int) ROW FORMAT DELIMITED FIELDS TERMINATED BY "," ; LOAD DATA LOCAL INPATH "./data.csv" OVERWRITE INTO TABLE test;
- 对于每个 Flag=0 的 ID,我们希望将其与另一个 Flag=1 但具有相同城市 - 邮政编码的 ID 配对。如果找不到另一个带有 Flag=1 和匹配的 City-Zip 的配对 ID,我们就删除该记录。
这是预期结果:
ID,City,Zip,Flag 1,A,95126,0 2,A,95126,1 4,B,95124,0 5,B,95124,1 7,C,95127,1 8,C,95127,0
关于如何在 Hive 或 Python 中进行配对的任何有价值的提示?
试试这个。
select t2.*
FROM
test t1 INNER JOIN test t2
ON t1.City != t2.City
AND t1.Zip != t2.Zip
AND t1.Flag != t2.Flag
AND t1.ID<t2.ID