SQL should be the default choice for data transformation logic
In my experience SQL gets unreadable fast when it comes to more complex query. I prefer PySpark where you can use python functions and classes to structure your code.