#1 it depends on the size of your data and your preference - with Prefect, you can just pass data between tasks as long as your execution env doesn't throw OOM errors -- this is in contrast to many other tools that don't support passing data between tasks
#2 S3 blocks work and can actually provide you more observability later on (a feature we are working on), but if this doesn't fit into your workflow e.g. if you leverage specific boto3/awswrangler to persist data, then you may go with that, up to you
#3 there is mapping in 2.0 so you can totally use that to process data in parallel e.g. using ConcurrentTaskRunner