gpt4 book ai didi

apache-spark - Pyspark:groupby,然后计算真实值

转载 作者:行者123 更新时间:2023-12-01 07:24:45 28 4
gpt4 key购买 nike

我的数据结构为JSON格式:

"header"{"studentId":"1234","time":"2016-06-23","homeworkSubmitted":True}
"header"{"studentId":"1234","time":"2016-06-24","homeworkSubmitted":True}
"header"{"studentId":"1234","time":"2016-06-25","homeworkSubmitted":True}
"header"{"studentId":"1236","time":"2016-06-23","homeworkSubmitted":False}
"header"{"studentId":"1236","time":"2016-06-24","homeworkSubmitted":True}
....

我需要绘制一个直方图来显示作业的数量Submitted:True在所有stidentIds上。我写了使数据结构平坦的代码,所以我的键是header.studentId,header.time和header.homeworkSubmitted。

我使用keyBy对studentId进行分组:
    initialRDD.keyBy(lambda row: row['header.studentId'])
.map(lambda (k,v): (k,v['header.homeworkSubmitted']))
.map(mapTF).groupByKey().mapValues(lambda x: Counter(x)).collect()

这给了我这样的结果:
("1234", Counter({0:0, 1:3}),
("1236", Counter(0:1, 1:1))

我只需要计数1的数量,可能将其映射到列表,以便可以使用matplotlib绘制直方图。我不确定如何进行和过滤所有内容。

编辑:最后,我遍历字典并将计数添加到列表中,然后绘制列表的直方图。我想知道是否有更优雅的方法来完成我在代码中概述的整个过程。

最佳答案

df = sqlContext.read.json('/path/to/your/dataset/')
df.filter(df.homeworkSubmitted == True).groupby(df.studentId).count()

请注意,如果存在 "header"True而不是 true,则它是无效的JSON

关于apache-spark - Pyspark:groupby,然后计算真实值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38003836/

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