【发布时间】:2018-01-29 12:04:08
【问题描述】:
我正在尝试将用户定义的聚合函数应用于 spark 数据帧,以应用附加平滑,请参见下面的代码:
import findspark
findspark.init()
import pyspark as ps
from pyspark.sql import SQLContext
from pyspark.sql.functions import col, col, collect_list, concat_ws, udf
try:
sc
except NameError:
sc = ps.SparkContext()
sqlContext = SQLContext(sc)
df = sqlContext.createDataFrame([['A', 1],
['A',1],
['A',0],
['B',0],
['B',0],
['B',1]], schema=['name', 'val'])
def smooth_mean(x):
return (sum(x)+5)/(len(x)+5)
smooth_mean_udf = udf(smooth_mean)
df.groupBy('name').agg(collect_list('val').alias('val'))\
.withColumn('val', smooth_mean_udf('val')).show()
这样做有意义吗?据我了解,这不能很好地扩展,因为我使用的是udf。我也找不到collect_list的确切工作方式,名称中的collect部分似乎表明数据被“收集”到边缘节点,但我假设数据被“收集”到各个节点?
提前感谢您的任何反馈。
【问题讨论】:
标签: python apache-spark pyspark user-defined-functions