С подходом ниже вы можете достичь, я верю
val input_df = List("20190930").toDF("date")
input_df.withColumn("new_date", from_unixtime(unix_timestamp(date_sub(from_unixtime(unix_timestamp($"date","yyyyMMdd"),"yyyy-MM-dd"),1), "yyyy-MM-dd"),"yyyyMMdd")).show
Output:
+--------+--------+
| date|new_date|
+--------+--------+
|20190930|20190929|
+--------+--------+