Python 在spark上实现Trie(或类似的数据结构)

Python 在spark上实现Trie(或类似的数据结构),python,python-2.7,apache-spark,pyspark,Python,Python 2.7,Apache Spark,Pyspark,我是一名实习生,我的任务是在spark cluster上实现电话号码的快速搜索算法,使用尝试(前缀树),并在几次这样的尝试中执行内部连接等操作 我成功地创建了一个能为大约500万个数字工作的应用程序(两次尝试,每次都有250万个数字) 我的任务是将其扩展到1000-2000万。尽管如果我尝试超过这个值,我会得到Java.outofmemory错误 现在我的方法是 我的代码, -从spark数据库创建电话号码的数据帧, -使用collect()将250万个数字加载到python列表中的内存(JVM

我是一名实习生,我的任务是在spark cluster上实现电话号码的快速搜索算法,使用
尝试
(前缀树),并在几次这样的尝试中执行内部连接等操作

我成功地创建了一个能为大约500万个数字工作的应用程序(两次尝试,每次都有250万个数字) 我的任务是将其扩展到1000-2000万。尽管如果我尝试超过这个值,我会得到
Java.outofmemory
错误

现在我的方法是 我的代码, -从spark数据库创建电话号码的数据帧, -使用collect()将250万个数字加载到python列表中的内存(JVM的内存)中 -将该列表转换为trie -清除列表 -在trie中搜索要搜索的号码 -如果找到,则返回true -否则加载下250万个数字,重复步骤3,依此类推

从集合导入defaultdict
第三类:
#使用insert、search实现trie。
定义初始化(自):
self.root=defaultdict()
def插入(自我,word):
当前=自根
对于大写字母:
current=current.setdefault(字母,{})
当前设置默认值(“\u end”)
def搜索(self,word):
当前=自根
对于大写字母:
如果字母不是当前字母:
返回错误
当前=当前[字母]
如果当前状态为“\u end”:
返回真值
返回错误
#这些是内部连接和合并函数
def ijoin_util(root1、root2、str):
对于root1中的k:
如果k='\u end':
ijoin_util.join.append(str)
返回
found=root2.get(k)
如果找到!=无:
ijoin_util(root1[k],found,str+k)
def内部_连接(根1、根2):
str=“”
ijoin_util.join=[]
ijoin_util(root1.root、root2.root、str)
返回ijoin_util.join
def merge_util(root1,root2):
对于root1中的k:
found=root2.get(k)
如果找到!=无:
merge_util(root1[k],已找到)
其他:
更新({k:root1[k]})
返回根2
def合并(根1、根2):
合并_util(root1.root,root2.root)

我知道对于这个问题来说,这是一个非常糟糕的实现,我想知道我是否能够以一种不必将trie存储在内存中的方式来实现它(我的意思是,如果我将其存储为嵌套映射的RDD),或者任何其他可能帮助我进一步扩展它的方法,你能提供你的spark代码吗?如何在Trie类中使用spark?