将用户功能应用于整个Spark DataFrame列

时间:2016-07-25 17:02:25

标签: apache-spark pyspark spark-dataframe

Spark DataFrame架构:

In [177]: testtbl.printSchema()
root
 |-- Date: long (nullable = true)
 |-- Close: double (nullable = true)
 |-- Volume: double (nullable = true)

我希望将标量值函数应用于testtbl列。假设我想计算“关闭”的平均值。柱。对于rdd我会做类似

的事情
rdd.fold(0, lambda x,y: x+y)

但是testtbl.Close不是rdd,它是一个功能有限的列对象。 testtbl行是rdds,列不是。那么如何将add或用户函数应用于单个列?

1 个答案:

答案 0 :(得分:0)

如果要将函数应用于整个列,则只需对列执行聚合操作。

例如,假设您要计算列sum中所有值的values。即使df不是汇总数据,将汇总函数应用于DataFrames也是有效的。

from pyspark.sql.functions import *

df = sc.parallelize([(1,), (2,), (3,)]).toDF(["values"])
df.agg(sum("values").alias("sum")).show()

+---+
|sum|
+---+
|  6|
+---+

您可以在Pyspark's aggregation documentation中找到另一个示例。

对于你问题的第二部分。您可以创建User Defined Aggregated Function,但如果我是对的,则仅适用于Scala