хочу загрузить 700к. записи в экземпляр SalesForce. Работа в настоящее время занимает более 1 часа. Я пытаюсь найти способ максимально повысить скорость.
def is_missing(s):
'''
if an element is missing, return True or False
'''
criteria = str(s).lower() == 'nan' or pd.isnull(s) or str(s).lower() == 'none' or str(s) == ''
if criteria:
return True
else:
return False
def jsonalise_dataframe(data_frame):
# prepare the data into json files so that they can be uploaded
bulk_data = []
for row in data_frame.itertuples():
d = row._asdict()
del d['Index']
# delete the nan records
for keys in list(d.keys()):
if is_missing(d[keys]):
del d[keys]
bulk_data.append(d)
return bulk_data
def chunks(lst, n):
"""Yield successive n-sized chunks from lst."""
for i in range(0, len(lst), n):
yield lst[i:i + n]
def upsert_sf_data(sf, data, api_name, ext_id):
results = getattr(sf.bulk, api_name).upsert(data, ext_id)
print('Data upserted on Saleforce.')
eval_results = calculateError(results)
print(eval_results)
return results, eval_results
data = pd.read_csv('/home/ec2-user/parallelUpload/full.csv')
data_json = jsonalise_dataframe(data)
data_to_sf = list(chunks(data_json, n = 2000))
upsert_sf_data(sf = sf, data = chunk, api_name = 'Prediction__c', ext_id = 'External_System_ID__c')
Как видите, я установил размер чанка в максимально допустимый размер (2000 записей). Код python обрабатывает 119 фрагментов, что означает 119 * 200 записей, а затем ждет около 20 минут, прежде чем обрабатывать следующие 119 фрагментов. Таким образом, в общей сложности для записи записей pu sh 700k требуется около 1 часа, что я считаю ненормальным.