title: What are the benefits of Apache Beam over Spark/Flink for batch processing?
body: <p><a href="https://beam.apache.org/documentation/" rel="noreferrer">Apache Beam</a> supports multiple runner backends, including Apache Spark and Flink. I'm familiar with Spark/Flink and I'm trying to see the pros/cons of Beam for batch processing.</p>
  
  <p>Looking at the <a href="https://beam.apache.org/get-started/wordcount-example/" rel="noreferrer">Beam word count example</a>, it feels it is very similar to the native Spark/Flink equivalents, maybe with a slightly more verbose syntax.</p>
  
  <p>I currently don't see a big benefit of choosing Beam over Spark/Flink for such a task. The only observations I can make so far:</p>
  
  <ul>
  <li>Pro: Abstraction over different execution backends.</li>
  <li>Con: This abstraction comes at the price of having less control over what exactly is executed in Spark/Flink.</li>
  </ul>
  
  <p>Are there better examples that highlight other pros/cons of the Beam model? Is there any information on how the loss of control affects performance?</p>
  
  <p>Note that I'm not asking for differences in the streaming aspects, which are partly covered in <a href="https://stackoverflow.com/questions/35264441/what-is-apache-beam">this question</a> and summarized in <a href="https://cloud.google.com/dataflow/blog/dataflow-beam-and-spark-comparison" rel="noreferrer">this article</a> (outdated due to Spark 1.X).</p>