Python 改进函数运行时
我创建了一个函数,用于获取数据结构并将其所有元组替换为列表 例如:Python 改进函数运行时,python,python-3.x,performance,runtime,Python,Python 3.x,Performance,Runtime,我创建了一个函数,用于获取数据结构并将其所有元组替换为列表 例如: 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': ['A
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)
您需要这样做的具体原因是什么?您可以将它转储到json并重新加载它的IDE注意:我可以问一下为什么需要执行这样的转换吗?不可能直接以列表的形式接收数据,也不可能直接以元组的形式使用数据吗?在PySpark中将带有元组的RDD转换为Dataframe时,我得到的是一个java指针,而不是数组。一旦把它转换成一个列表,我就得到了正确的数据。