我需要在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的情况下进行聚合?
答案 0 :(得分:0)
匹配维度或不匹配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"))