Apache spark 在pyspark列中的列表上应用函数

Apache spark 在pyspark列中的列表上应用函数,apache-spark,pyspark,apache-spark-sql,user-defined-functions,Apache Spark,Pyspark,Apache Spark Sql,User Defined Functions,现在,我想在列“_2”上应用一个函数,如求和或平均值,以创建一列“_3” 例如,我使用sum函数创建了一列 结果如下所示 >> df = hc.createDataFrame([('a', [1.0, 1.0]), ('a',[1.0, 0.2,0.3,0.7]), ('b', [1.0]),('c' ,[1.0, 0.5]), ('d', [0.55, 1.0,1.4]),('e', [1.05, 1.0])]) >> df.show() +---+--------

现在,我想在列“_2”上应用一个函数,如求和或平均值,以创建一列“_3” 例如,我使用sum函数创建了一列 结果如下所示

>> df = hc.createDataFrame([('a', [1.0, 1.0]), ('a',[1.0, 0.2,0.3,0.7]), ('b', [1.0]),('c' ,[1.0, 0.5]), ('d', [0.55, 1.0,1.4]),('e', [1.05, 1.0])])


>> df.show()
+---+--------------------+
| _1|                  _2|
+---+--------------------+
|  a|          [1.0, 1.0]|
|  a|[1.0, 0.2, 0.3, 0.7]|
|  b|               [1.0]|
|  c|          [1.0, 0.5]|
|  d|    [0.55, 1.0, 1.4]|
|  e|         [1.05, 1.0]|
+---+--------------------+

提前感谢TL;DR除非使用,否则必须为每个操作定义
UserDefinedFunction

从pyspark.sql.functions导入udf
将numpy作为np导入
@udf(“双重”)
def数组_和(xs):
如果xs不是None,则返回np.sum(xs).tolist()
@udf(“双重”)
def阵列_平均值(xs):
如果xs不是None-else-None,则返回np.mean(xs).tolist()
(df)
.带列(“平均值”,数组“平均值”(“2”))
.withColumn(“sum”,数组_sum(“_2”))
在某些情况下,您可能更喜欢分解和聚合,但它的应用程序有限,而且通常要昂贵得多,除非数据已经由唯一标识符进行了分区

从pyspark.sql.functions导入单调递增的id,first,mean,sum,explode
(df)
.withColumn(“\u id”,单调地增加\u id())。withColumn(“x”,explode(“\u 2”))
.groupBy(“\u id”)
.agg(第一个(“_1”)、第一个(“_2”)、平均数(“x”)、总和(“x”))

感谢您的回复。但我没有使用装饰函数,而是尝试注册函数udf并执行相同的操作。我收到以下错误类型错误:无法使用灵活类型执行reduce我无法让装饰师在这里完成魔术-您能解释一下吗??
+---+--------------------+----+
| _1|                  _2|  _3|
+---+--------------------+----+
|  a|          [1.0, 1.0]| 2.0|
|  a|[1.0, 0.2, 0.3, 0.7]| 2.2|
|  b|               [1.0]| 1.0|
|  c|          [1.0, 0.5]| 1.5|
|  d|    [0.55, 1.0, 1.4]|2.95|
|  e|         [1.05, 1.0]|2.05|
+---+--------------------+----+