To answer the question we first must clarify what is exactly the first element of a DataFrame, since we are not speaking about an ordered collection that placed on a single machine, but instead we are dealing with distributed collection with no particular order between partitions, so the answer is not obvious.
In case you want to drop the first element from every partition you can use:
df.mapPartitions(iterator => iterator.drop(1))
In case you want to drop the first element from the first partition, you can use:
val rdd = df.rdd.mapPartitionsWithIndex{
case (index, iterator) => if(index==0) iterator.drop(1) else iterator
}
sqlContext.createDataFrame(rdd, df.schema)
Both solutions are not very graceful, and seems like bad practise, would be interesting to know the complete use case, maybe there is a better approach.