A good compass calibration is important to ensure a safe, controlled flight.
The only purpose of compass calibration is to measure the components of the aircraft's magnetic field so that they can be subtracted from the total measured magnetic field. Rotating the three-axis magnetometers allows the aircraft's flight controller to separate the surrounding magnetic field from the magnetic field of the aircraft itself. It's able to separate them since the aircraft's magnetic field remains constant (in the frame of reference of the magnetometers) while the surrounding magnetic field rotates.
No amount of measuring will allow the aircraft's flight controller to determine the deviation or declination at a location (since it has no idea where true north is located). Declination is determined from a global declination model within the firmware. There is no way to compensate for deviation since it's unmeasurable. That explains why taking off in areas of significant magnetic deviation will lead to unstable flight.
The Spark can only detect when the compass is providing extremely poor (implausible) data. This typically occurs if you place it near a strong magnetic field. It will flash red and yellow lights and the Spark will indicate a compass error in the app.
You can view the current compass interference in the "Main Controller Settings" --> "Advanced Settings" --> "Sensors" section of DJI GO. The colored bars should be in the green (Excellent) range when the Spark is in a location that is away from magnetic influences. If the bars are in the red (Poor) range or close to it, move the Spark to a different location and check again. If the compass interference is still in the red (Poor) range or close to it, the compass could need calibrated or it could be magnetized/damaged.
You do not need to calibrate before every flight and in some cases you definitely should not calibrate. That doesn't mean you shouldn't ever bother doing it. It only takes one time for it to go very wrong.
DO calibrate the Spark compass if:
DO NOT calibrate the Spark compass if: