使用数据框在pyspark中获取列post group by

Posted

技术标签:

【中文标题】使用数据框在pyspark中获取列post group by【英文标题】:get columns post group by in pyspark with dataframes 【发布时间】:2020-01-16 08:50:16 【问题描述】:

我看到了几篇与我的问题相关的帖子 post1 和 post2。但是,在遵循 post1 解决方案时,我遇到了以下错误。

joinedDF = df.join(df_agg, "company")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/spark/python/pyspark/sql/dataframe.py", line 1050, in join
    jdf = self._jdf.join(other._jdf, on, how)
AttributeError: 'NoneType' object has no attribute '_jdf'

整个代码sn-p

df = spark.read.format("csv").option("header", "true").load("/home/ec2-user/techcrunch/TechCrunchcontinentalUSA.csv")

df_agg = df.groupby("company").agg(func.sum("raisedAmt").alias("TotalRaised")).orderBy("TotalRaised", ascending = False).show()

joinedDF = df.join(df_agg, "company")

【问题讨论】:

【参考方案1】:

在第二行的末尾有 .show

df_agg = df.groupby("company").agg(func.sum("raisedAmt").alias("TotalRaised")).orderBy("TotalRaised", ascending = False).show()

像这样删除它:

df_agg = df.groupby("company").agg(func.sum("raisedAmt").alias("TotalRaised")).orderBy("TotalRaised", ascending = False)

你的代码应该可以工作。

您对该 df 使用了一个操作并将其分配给 df_agg 变量,这就是为什么您的变量是 NoneType(在 python 中)或 Unit(在 scala 中)

【讨论】:

非常感谢 - 我没有遇到任何错误 - 但是加入后我失去了 df_agg 中发生的 groupby 和聚合 加入后你松了 TotalRaised 列?请标记答案 不,我松开了 groupby 和 orderBy 操作 查看您的代码,这种行为是正常的。你有“df”变量,它是原始数据,之后你有聚合的 df_agg。之后,您将使用 df_agg(聚合)加入第一个(“df”,非聚合),因此对于“df”中的每一行,您将带来 TotalRaised 列。如果您只想要我们 df_agg 的汇总数据

以上是关于使用数据框在pyspark中获取列post group by的主要内容,如果未能解决你的问题,请参考以下文章

pyspark:数据框在另一个数据框的列中按ID选择行

加入两个数据框和结果数据框在 PySpark 中包含不重复的项目?

获取特征重要性 PySpark 朴素贝叶斯分类器

数据框在多列上连接,pyspark中的列有一些条件[重复]

有没有办法在 pyspark 中获取列数据类型?

如何将 CSV 值与 pyspark 数据框中的单元格中的值分别分隔为新列及其值