What is Apache Spark and how is it used in data engineering and big data processing? How does Spark process large datasets faster than traditional systems like Hadoop MapReduce? What are the main components and features of Apache Spark? How does Spark support batch processing, streaming, machine learning, and graph analytics? What are the advantages and limitations of using Apache Spark in modern data engineering workflows?