I still don't get why we need TFX. TFX will convert your defined pipeline to Airflow DAG and run it on airflow, I could just write my pipelines in python and use Airflow's PythonOperator to build a pipeline directly right? why bother learning another wrapper on top of it? What else TFX offers that cannot be done by just using airflow+TF+Spark/Beam