将数组聚合到具有分组依据的数据帧中



我需要在DataFrame中聚合一个数组。

DataFrame是以这种方式创建的

splitted.map(lambda x: Row(store= int(x[0]), date= parser.parse(x[1]), values= (x[2:(len(x))]) )  )

是一个数组

我想这样思考

mean_by_week = sqlct.sql("SELECT store, SUM(values) from sells group by date, store")

但是我有以下错误

AnalysisException:u"由于数据类型不匹配,无法解析"sum(values)":函数sum需要数字类型,而不是ArrayType(StringType,true);行0位置0"

数组始终具有相同的维度。但每次运行的尺寸都可能发生变化,接近100的长度。

如何在不进行RDD的情况下进行聚合?

array<>匹配维度或不求和没有意义,因此没有实现。你可以尝试重组和聚合:

from pyspark.sql.functions import col, array, size, sum as sum_
n = df.select(size("values")).first()[0]
df = sc.parallelize([(1, [1, 2, 3]), (1, [4, 5, 6])]).toDF(["store", "values"])
df.groupBy("store").agg(array(*[
    sum_(col("values").getItem(i)) for i in range(n)]).alias("values"))

相关内容

  • 没有找到相关文章

最新更新