Hash Join原理及Python代码实现

本文详细介绍了如何在Python中实现HashJoin操作,通过使用列表和字典来模拟数据库表格,然后构建哈希表以进行连接操作。示例代码展示了如何处理两个表格的数据,并输出结果,具体包括创建哈希表、执行HashJoin并打印匹配的行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在文章 Hash Join 中介绍了 Hash Join的原理及实现方法,在Python实现中作者使用了defaultdict,本文是对这篇文章的一些补充,另外,实现的时候没有使用defaultdict:

 


#1. 表在Python中的存放方式
# 可以使用一个元组(tuple)表示一行,使用列表(list)表示一张表,如下所示:
tableA = []
row1 = (27, "Jonah")
tableA.append(row1)
tableA.append((18, "Alan"))
tableA.append((28, "Glory"))
tableA.append((18, "Popeye"))
tableA.append((28, "Alan"))

tableB = [("Jonah", "Whales"),
          ("Jonah", "Spiders"),
          ("Alan", "Ghosts"),
          ("Alan", "Zombies"),
          ("Glory", "Buffy")]

# 模拟SQL: select * from tableA where Name="Alan"
for row in tableA : 
    if  row[1] == "Alan":
        print(row)

# multimap 表的存放方式: 该表要支持基于哈希的查找,因此直接使用字典(dict)即可,我们的目标是构造一个如下的哈希表:

MB = {  
        "Jonah" : [("Jonah","Whales"), ("Jonah","Spiders")], 
        "Alan"  : [("Alan","Ghosts"),  ("Alan","Zombies")],
        "Glory" : [("Glory","Buffy")]
     }



# 先构造一个字典,该字典的key包含了tableB的Character列的所有值,value均为空集合
#  {'Jonah': [], 'Alan': [], 'Glory': []}

MB = {}
for row in tableB:
    MB[row[0]]=[]
print(MB)

# 构建hash表
for row in tableB:
    MB[row[0]].append(row)
print(MB)


#Hash Join

print("**********")
tableC=[]

for row_a in tableA:
    if row_a[1] not in MB:
        continue
    else:
        for row_mb in MB[row_a[1]]:
            row_c = row_a + row_mb
            print(row_c)
            tableC.append(row_c)

输出中最后部分如下:

(27, 'Jonah', 'Jonah', 'Whales')
(27, 'Jonah', 'Jonah', 'Spiders')
(18, 'Alan', 'Alan', 'Ghosts')
(18, 'Alan', 'Alan', 'Zombies')
(28, 'Glory', 'Glory', 'Buffy')
(28, 'Alan', 'Alan', 'Ghosts')
(28, 'Alan', 'Alan', 'Zombies')

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值