It appears that you cannot use fill() and friends to quickly modify struct fields.
c got filled in, but a.b didn't.
I don't know if it's "appropriate", but it would be nice if fill() and friends worked automatically on struct fields.
As things are today, there doesn't appear to be a way to fill in null values inside structs. If you try when(), you realize that you cannot do when(col('a.b') is None, '') because Column doesn't implement the appropriate protocol for is. And if you try when(col('a.b') == None, '') it doesn't catch the null values.