gpt4 book ai didi

apache-spark - 将 PySpark 数据框列的聚合值存储到变量中

转载 作者:行者123 更新时间:2023-12-03 15:17:56 26 4
gpt4 key购买 nike

我在这里使用 PySpark 数据框。 “test1”是我的 PySpark 数据框,而 event_date 是时间戳类型。因此,当我尝试获取 event_date 的不同计数时,结果是一个整数变量,但是当我尝试获取同一列的最大值时,结果是一个数据框。我想了解哪些操作会导致数据框和变量。我还想知道如何将事件日期的最大值存储为变量

产生整数类型的代码:

loop_cnt=test1.select('event_date').distinct().count()
type(loop_cnt)

导致数据帧类型的代码:
last_processed_dt=test1.select([max('event_date')])
type(last_processed_dt)

编辑以添加可重现的示例:
schema = StructType([StructField("event_date", TimestampType(), True)])

df = sqlContext.createDataFrame([(datetime(2015, 8, 10, 2, 44, 15),),(datetime(2015, 8, 10, 3, 44, 15),)], schema)

返回数据帧的代码:
last_processed_dt=df.select([max('event_date')])
type(last_processed_dt)

返回变量的代码:
loop_cnt=df.select('event_date').distinct().count()
type(loop_cnt)

最佳答案

您不能直接访问数据框中的值。数据框返回一个行对象。相反,Dataframe 为您提供了将其转换为 Python 字典的选项。通过以下示例,我将计算平均字数:

wordsDF = sqlContext.createDataFrame([('cat',), ('elephant',), ('rat',), ('rat',), ('cat', )], ['word'])
wordCountsDF = wordsDF.groupBy(wordsDF['word']).count()
wordCountsDF.show()

以下是字数统计结果:
+--------+-----+
| word|count|
+--------+-----+
| cat| 2|
| rat| 2|
|elephant| 1|
+--------+-----+

现在我计算 count 列的平均值 apply collect() 操作。记住 collect() 返回一个列表。这里的列表只包含一个元素。
averageCount = wordCountsDF.groupBy().avg('count').collect()

结果看起来像这样。
[Row(avg(count)=1.6666666666666667)]

您不能使用某些 python 变量直接访问平均值。您必须将其转换为字典才能访问它。
results={}
for i in averageCount:
results.update(i.asDict())
print results

我们的最终结果如下所示:
{'avg(count)': 1.6666666666666667}

最后,您可以使用以下方法访问平均值:
print results['avg(count)']

1.66666666667

关于apache-spark - 将 PySpark 数据框列的聚合值存储到变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36987454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com