Internally, both methods return a Row[] object. The main difference I noticed is that .take(n) requires the parameter n, whereas .head(n) accepts n as an optional parameter with a default value of 1.
Row[]
.take(n)
n
.head(n)