我对Python和Spark很新,但让我看看能不能解释一下我想做什么。
我想要处理一堆不同类型的页面。我为这些页面的所有常见属性创建了一个基类,然后从基类继承了一个特定于页面的类。我们的想法是,通过在调用时更改页面类型,spark runner将能够为所有页面执行完全相同的操作。
转轮
def CreatePage(pageType):
if pageType == "Foo":
return PageFoo(pageType)
elif pageType == "Bar":
return PageBar(pageType)
def Main(pageType):
page = CreatePage(pageType)
pageList_rdd = sc.parallelize(page.GetPageList())
return = pageList_rdd.mapPartitions(lambda pageNumber: CreatePage(pageType).ProcessPage(pageNumber))
print Main("Foo")
PageBaseClass.py
class PageBase(object):
def __init__(self, pageType):
self.pageType = None
self.dbConnection = None
def GetDBConnection(self):
if self.dbConnection == None:
# Set up a db connection so we can share this amongst all nodes.
self.dbConnection = DataUtils.MySQL.GetDBConnection()
return self.dbConnection
def ProcessPage():
raise NotImplementedError()
PageFoo.py
class PageFoo(PageBase, pageType):
def __init__(self, pageType):
self.pageType = pageType
self.dbConnetion = GetDBConnection()
def ProcessPage():
result = self.dbConnection.cursor("SELECT SOMETHING")
# other processing
我从简洁中省略了许多其他页面特定的功能,但我的想法是,我想保留如何在页面类中处理该页面的所有逻辑。并且,能够共享数据库连接和s3存储桶等资源。
我知道我现在的方式,就是为rdd中的每个项目创建一个新的Page对象。有没有办法做到这一点,它只是创建一个对象?这有更好的模式吗?谢谢!
答案 0 :(得分:0)
一些建议: