Welcome to SE! Yes, you can import the relationship at the same time. The documentation describes your situation here.
This is based on one row per child with parent details in the columns. You import once for child, mother, relationship and once for child, father, relationship.
Check that your default dedupe rules work for the parent fields you are ...
That backtrace is very helpful.
The issue has something to do with your custom field with an ID of 1. I've seen this when, for instance, the "Search by Range" option was set on a field that displays as an option value. Somewhere in the field's definition are conflicting settings.
If this isn't enough to track down the issue, please run this SQL ...
add a custom field purely to track the import by adding a 1,2,3 etc column in your import
sometimes screens can time out but the import runs regardless, so having the above helps confirm if it really has stopped or not
hunt down some tickets about tweaking server so it runs for longer
Look at MySQL and find the temporary table. It will be names something like "civicrm_tmp_d_dflt_..."
Search status=NEW and that will tell you the number of rows left to import. Once the table has no NEW rows to import it is done and the table will be removed. If it did not succeed the table will still exist. I find this the best way to monitor the ...
I don't think you can do this in a platform-independent way since "admin role" means different things in different CMS's. What you can do that is platform-independent is check specific CiviCRM permissions, e.g. CRM_Core_Permission::check('administer CiviCRM', $contact_id)
You can leave out $contact_id to check for the currently logged-in user.