[英]Improve function run-time
我創建了一個獲取數據結構並將其所有元組替換為列表的函數。
例如:
in_data = ({'name': 'Bob', 'age': 50, 'children': ('Alex', 'Justin', 'Daniel')},
{'Name': 'Olive', 'Age': 42, 'Children': ('Rose', 'Vera', 'Karen')})
out_data = [{'name': 'Bob', 'age': 50, 'children': ['Alex', 'Justin', 'Daniel']},
{'Name': 'Olive', 'Age': 42, 'Children': ['Rose', 'Vera', 'Karen']}]
這是功能:
def t2l(data):
if type(data) in [tuple]:
data = list(data)
for inx, item in enumerate(data):
if type(data) in [dict]:
inx, item = item, data[item]
if type(item) in [tuple]:
data[inx] = list(item)
item = data[inx]
if type(item) in (list, dict, tuple):
data[inx] = t2l(item)
return data
這個函數將在 RDD 的數百萬行上運行,所以我想盡可能地改進它。
有沒有辦法像開箱即用的功能一樣改善運行時間,我可以用它來使它更好?
謝謝
不知道它是否更快或會篡改您擁有的其他數據,但您可以轉儲到 json 並重新加載它
import json
print(json.loads(json.dumps(in_data)))
這應該更快,但我不確定您是否想檢查除tuple
以外的任何其他內容:
def t2l(data):
for item in data:
for key in item:
if type(item[key]) is tuple:
item[key] = [*item[key]]
data = [*data]
return data
表現:
%%timeit
t2l(in_data*1000000)
735 ms ± 12.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%%timeit
json.loads(json.dumps(in_data*1000000))
4.43 s ± 37.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.