有点复杂的PySpark选择和聚合查询

有点复杂的PySpark选择和聚合查询,pyspark,pyspark-sql,Pyspark,Pyspark Sql,我有一个具有以下数据类型的pyspark数据帧: printdf.dtypes ['TransactionDate','timestamp','GroupByFld','int','Amount','double', '调整交易日期','日期'] 我想做与 选择min'AdjustedTransactionDate',max'AdjustedTransactionDate',GroupByFld,sum'Amount' 我想我可以使用Pyspark的dataframe api,但即使做一些简单的

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

printdf.dtypes ['TransactionDate','timestamp','GroupByFld','int','Amount','double', '调整交易日期','日期'] 我想做与

选择min'AdjustedTransactionDate',max'AdjustedTransactionDate',GroupByFld,sum'Amount'

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

df.selectminAdjustedTransactionDate 给我一个错误:

org.apache.spark.sql.AnalysisException:无法解析给定输入列[TransactionDate、GroupByFld、Amount、AdjustedTransactionDate]

更新:

我最后做了:

将pyspark.sql.functions作为fn导入 df.groupBy'GroupByFld'。aggfn.min'adjTransactionDate'。别名'MinTransactionDate',fn.max'adjTransactionDate'。别名'MaxTransactionDate',fn.sum'Amount'。别名'Amount.show 您需要先选择groupBy,然后选择agg,而不是select


应该做你想做的。

你确定你调用的是pyspark.sql.functions.min而不是_builtin _; min?我做了一个更新-仍然不正确,但有点接近。请参见上文。您的语法不正确。模式是df.groupByGroupByFld.agg*agg_字段。试试这个:df.groupBy'GroupByFld'。aggmin'AdjustedTransactionDate',max'AdjustedTransactionDate',sum'Amount'。顺便说一句,像这样导入min、max和sum会覆盖内置函数-我建议不要这样做。我通常会将pyspark.sql.functions导入为f,然后我可以在需要API函数时调用f.min、f.max、f.sum等。或的可能重复。您的错误消息是因为AdjustedTransactionDate的最小值为A。
df.groupBy('GroupByFld')\
  .agg(min('AdjustedTransactionDate'),
       max('AdjustedTransactionDate'),
       sum('Amount'))