Dynamic Partition

salesDF.write.partitionBy("Country").save("path")

Bucketing

Number of files created = No. of partitions * No. of buckets

salesDF.write.bucketBy(4,"City").sortBy("City").saveAsTable("lti871.salebuck")

Partitioning & Bucketing

salesdf.write.partitionBy("Country").bucketBy(10,"city").sortBy("City").saveAsTable("lti871.salebuck")

NOTE

BucketBy() does not support .save(), .insertInto() and .jdbc() so use saveAsTable()