【问题标题】:Somewhat complex PySpark Select & Aggregate query [duplicate]有点复杂的 PySpark 选择和聚合查询 [重复]
【发布时间】:2019-05-30 04:20:36
【问题描述】:

我有一个具有以下数据类型的 pyspark DataFrame:

print(df.dtypes)
[('TransactionDate', 'timestamp'), ('GroupByFld', 'int'), ('Amount', 'double'), 
('AdjustedTransactionDate', 'date')]

我想做相当于

select min('AdjustedTransactionDate'),max('AdjustedTransactionDate'), GroupByFld, sum('Amount')

我以为我可以使用 Pyspark 的 dataframe api,但我什至可以做一些简单的事情,例如:

df.select(min("AdjustedTransactionDate"))

给我错误:

org.apache.spark.sql.AnalysisException: 给定输入列无法解析“A”:[TransactionDate, GroupByFld, Amount, AdjustedTransactionDate];;

更新:

我最终做了:

import pyspark.sql.functions as fn
df.groupBy('GroupByFld').agg(fn.min('adjTransactionDate').alias('MinTransactionDate'),fn.max('AdjTransactionDate').alias('MaxTransactionDate'),fn.sum('Amount').alias('Amount')).show()

【问题讨论】:

  • 你确定你打电话给pyspark.sql.functions.min而不是__builtin__.min
  • 我做了一个更新——仍然不正确,但更接近一点。见上文。
  • 您的语法不正确。模式是df.groupBy("GroupByFld").agg(*agg_fields)。试试这个:df.groupBy('GroupByFld').agg(min('AdjustedTransactionDate'),max('AdjustedTransactionDate'),sum('Amount'))。顺便说一句,像这样导入 minmaxsum 会覆盖内置函数——我建议不要这样做。
  • 我一般是import pyspark.sql.functions as f,然后当我需要API函数时,我可以调用f.minf.maxf.sum等。
  • Sum operation on PySpark DataFrame giving TypeError when type is finecan't resolve … given input columns 的可能重复项。您的错误消息是因为"AdjustedTransactionDate"minA

标签: pyspark pyspark-sql


【解决方案1】:

您需要先groupBy 然后agg 而不是select

df.groupBy('GroupByFld')\
  .agg(min('AdjustedTransactionDate'),
       max('AdjustedTransactionDate'),
       sum('Amount'))

应该做你想做的。

【讨论】:

    猜你喜欢
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 2013-03-16
    相关资源
    最近更新 更多