有点复杂的PySpark Select&Aggregate查询

时间:2019-01-03 14:49:58

标签: pyspark pyspark-sql

我有一个具有以下数据类型的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()

1 个答案:

答案 0 :(得分:1)

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

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

应该做你想要的。