PySpark为列agg outpu分配名称

2024-04-19 22:49:30 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这样一个数据帧:

import pyspark
import pyspark.sql.functions as sf
import pyspark.sql.types as sparktypes
import datetime

sc = pyspark.SparkContext(appName="test")
sqlcontext = pyspark.SQLContext(sc)

rdd = sc.parallelize([('a',datetime.datetime(2014, 1, 9, 0, 0)),
                      ('b',datetime.datetime(2014, 1, 27, 0, 0)),
                      ('c',datetime.datetime(2014, 1, 31, 0, 0))])
testdf = sqlcontext.createDataFrame(rdd, ["id", "date"])

print(testdf.show())
print(testdf.printSchema())

给出测试数据帧:

^{pr2}$

我想得到日期列的最大值:

max_date = testdf.agg(sf.max(sf.col('date'))).collect()
print(max_date)

给出:

[Row(max(date)=datetime.datetime(2014, 1, 31, 0, 0))]

如何在原始操作本身中应用自定义名称以显示而不是自动指定max(date),比如max_date,这样我就可以以max_date[0]['max_date']而不是max_date[0][0]或{}来访问值,还有没有更好的方法来访问这个值,Row()的某个属性?在


Tags: 数据importsqldatetimedateassfmax
1条回答
网友
1楼 · 发布于 2024-04-19 22:49:30

你是说这个吗?在

max_date = testdf.agg(sf.max(sf.col('date')).alias("newName")).collect()

还有更好的方法。不是真的。Collect会带来一个行的列表,您需要告诉您需要哪一列,以便使用:

^{pr2}$

你不能再比这短了。。。在

相关问题 更多 >