Since you are saying this is a one time activity, try the below:
Remember since you have 2500+ records, you decide how you split the records. 500 each.
Get EffortHoursDatabase into a collection (only few columns)
Maybe ClearCollect(Temp1, ShowColumns( EffortHoursDatabase,"ID","ResourceO365ID","ResourceEmail"))
Like i said break the number of records so use filters to the above.
Next display the collection into a Gallery.
In the gallery inlcude a Label1 and Label2 and include:
Label1: ThisItem.ID
Labdl2: Office365Users.UserProfile(ThisItem.ResourceID).email
You should see all the email id's in the respective rows of the gallery.
Insert a button outside the gallery.
Button on select property:
ForAll(Gallery1.AllItems,Patch(EffortHoursDatabase,LookUp(EffortHoursDatabase,ID=Value(Label1.Text),{ResourceEmail:Label2.Text}))
note: Make sure you turn off all related flows for the SP list .