We're also facing same issue ... and any pointers will be useful.
The issue is by default dataframe assigns null values to non existing fields. The problem is there could be a valid use case where and upsert statement wants to actually update the value of a column to null i.e. delete the value. So I think the issue is not with KuduContext but with DataFrame.
I'm a Spark newbie; is there a way to control how DataFrame is created ?