Stackoverflow中的Users.xml
大数据存在问题。它具有> 8mill Data。
我还有posts.xml
包含大量数据。
Users.xml
= 2,49 GB
Posts.xml
= 58,3 GB
我将从底部到顶部显示我的脚本的通信。
如果不存在,则over方法创建表,并且inserStatement获取执行语句的String。
def savingDataToDatabase(tableName, element):
createTable(tableName)
connection = sqlite3.connect("database.db", isolation_level=None)
c = connection.cursor()
if(tableName == "Users"):
insertStatement = sqlInsertStatement(tableName)
c.execute(insertStatement,([element["AccountId"], element["Reputation"], element["CreationDate"], element["CreationTime"], element["DisplayName"], element["LastAccessDate"], element["WebsiteUrl"], element["Location"], element["AboutMe"], element["Views"], element["UpVotes"], element["DownVotes"], element["Age"]]))
connection.commit()
connection.close()
processingUsersXML(element)
返回带有预处理数据的Dict。
def processingDataForSQL(filename, element):
if filename == 'Users':
user = processingUsersXML(element)
savingDataToDatabase(filename, user)
def getDataFromXml(filename):
for evt, elem in iterparse('/../usws/stackoverflowDataScience/dumpData/'+str(filename)+'.xml', events=('end',)):
if elem.tag == 'row':
element_fields = elem.attrib
processingDataForSQL(filename, element_fields)
elem.clear()
def chosenXMLFile():
getDataFromXml('Users')
getDataFromXml('Posts')
chosenXMLFile()
我希望你们能提供帮助。这需要花费很多时间。它有效,但它很慢。我没有找到任何帮助我的帖子。我看过一篇文章,但它并没有真正帮助我,如果你能通过我的代码向我展示我可以修改它,我将不胜感激。
最好的问候
JoshED
答案 0 :(得分:0)
不是每次都创建一个新的连接和光标,而是可以将一个光标传递给savingDataToDatabase函数:
def savingDataToDatabase(tableName, element, cursor):
if tableName == 'Users':
insertStatement = sqlInsertStatement(tableName)
cursor.execute(insertStatement,([element["AccountId"], element["Reputation"], element["CreationDate"], element["CreationTime"], element["DisplayName"], element["LastAccessDate"], element["WebsiteUrl"], element["Location"], element["AboutMe"], element["Views"], element["UpVotes"], element["DownVotes"], element["Age"]]))
def processingDataForSQL(filename, element, cursor):
if filename == 'Users':
user = processingUsersXML(element)
savingDataToDatabase(filename, user, cursor)
def getDataFromXml(filename):
tableName = filename
createTable(tableName)
connection = sqlite3.connect("database.db", isolation_level=None)
cursor = connection.cursor()
for evt, elem in iterparse('/../usws/stackoverflowDataScience/dumpData/'+str(filename)+'.xml', events=('end',)):
if elem.tag == 'row':
element_fields = elem.attrib
processingDataForSQL(filename, element_fields, cursor)
elem.clear()
connection.commit()
connection.close()
def chosenXMLFile():
getDataFromXml('Users')
getDataFromXml('Posts')
chosenXMLFile()