【发布时间】: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'))。顺便说一句,像这样导入min、max和sum会覆盖内置函数——我建议不要这样做。 -
我一般是
import pyspark.sql.functions as f,然后当我需要API函数时,我可以调用f.min、f.max、f.sum等。 -
Sum operation on PySpark DataFrame giving TypeError when type is fine 或 can't resolve … given input columns 的可能重复项。您的错误消息是因为
"AdjustedTransactionDate"的min是A。
标签: pyspark pyspark-sql