当前位置: 首页 > 知识库问答 >
问题:

使用group by将数组聚合到数据帧中

戴鸿羲
2023-03-14

我需要在我的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")

但我有以下错误

分析异常:由于数据类型不匹配,u“无法解析‘sum(values)’:函数sum需要数字类型,而不是ArrayType(StringType,true);第0行位置0”

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

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

共有1个答案

潘翊歌
2023-03-14

数组的维度匹配或不求和

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"))

 类似资料:
  • 我正在考虑将dataset1分解为每个“T”类型的多个记录,然后与DataSet2连接。但是你能给我一个更好的方法,如果数据集变大了,它不会影响性能吗?

  • 这是我的密码: 我想知道如何将df3绑定到单个数据帧中作为"NA"s? 我在r_blogger上找到了一篇关于将向量或长度不等的数据帧组合成一个数据帧的文章。http://www.r-bloggers.com/r-combining-vectors-or-data-frames-of-unequal-length-into-one-data-frame/ 但是我从数据中得到的数据框,其中一些是空的

  • 我有一个数据帧的值,如: 我想得到每个人不同行动的数量。这一点我可以通过

  • 问题内容: 我试图在pySpark的一行代码中进行多项操作,但不确定我的情况是否可行。 我的意图是不必将输出另存为新的数据框。 我当前的代码非常简单: 我的意图是在使用后添加,以得到与每个 列值匹配的记录计数,这些记录打印\显示为输出。 尝试使用时,出现异常。 有什么方法可以同时实现和 .show()打印,而无需将代码拆分为两行命令,例如: 或更好的办法是将合并的输出输出到-额外的一栏,用于说明与

  • 我正在尝试通过ID和日期聚合数据帧。假设我有一个DataFrame: 我想通过ID和日期(频率=1W)聚合该值,并得到一个dataframe如下所示: 我理解它可以通过迭代ID并使用grouper聚合价格来实现。有没有更有效的方法不迭代IDS?多谢。

  • 我正在用PySpark DataFrames分析一些数据。假设我有一个正在聚合的数据帧< code>df: 这将给我: 聚合工作得很好,但我不喜欢新的列名。有没有办法将此列重命名为人类可以从方法中读取的内容?也许更类似于中的操作: