python, pyspark : get sum of a pyspark dataframe column values
<p>say I have a dataframe like this</p>

<pre><code>name age city
abc   20  A
def   30  B
</code></pre>

<p>i want to add a summary row at the end of the dataframe, so result will be like</p>

<pre><code>name age city
abc   20  A
def   30  B
All   50  All
</code></pre>

<p>So String 'All', I can easily put, but how to get sum(df['age']) ###column object is not iterable</p>

<pre><code>data = spark.createDataFrame([("abc", 20, "A"), ("def", 30, "B")],["name", "age", "city"])
data.printSchema()
#root
 #|-- name: string (nullable = true)
 #|-- age: long (nullable = true)
 #|-- city: string (nullable = true)
res = data.union(spark.createDataFrame([('All',sum(data['age']),'All')], data.columns))  ## TypeError: Column is not iterable
#Even tried with data['age'].sum() and got error.   If i am using [('All',50,'All')], it is doing fine. 
</code></pre>

<p>I  usually work on Pandas dataframe and new to Spark. Might be my undestanding about spark dataframe is not that matured.</p>

<p>Please suggest, how to get the sum over a dataframe-column in pyspark. And if there is any better way to add/append a row to end of a dataframe.
Thanks.</p>

<p>A dataframe is immutable, you need to create a new one. To get the sum of your age, you can use this function: <code>data.rdd.map(lambda x: float(x["age"])).reduce(lambda x, y: x+y)</code></p>

<p>The way you add a row is fine, but why would you do such a thing? Your dataframe will be hard to manipulate and you wont be able to use aggregations functions unless you drop the last line.</p>

python pyspark pyspark-sql