pandas - pyspark:在日期和时间重新采样 pyspark 数据帧

标签 pandas pyspark

如何重新采样 pyspark 数据帧,就像在 Pandas 中一样,我们有 pd.grouper 和 pd.resample,我可以在 h、2h、3h、周重新采样。我有以下示例 pyspark 数据框,我如何在列 ind 和 date 以及每隔 h/2h/3h 聚合它

from pyspark import SparkContext
from pyspark.sql import SQLContext

sc = SparkContext.getOrCreate()
sqlContext = SQLContext(sc)

a = sqlContext.createDataFrame([["Anand", "2020-02-01 16:00:00", 12, "ba"],
                         ["Anand", "2020-02-01 16:05:00", 7, "ba" ]
                        ["Anand", "2020-02-02 19:10:00", 14,"sa"], 
                        ["Carl", "2020-02-01 16:00:00", 16,"da"], 
                        ["Carl", "2020-02-02 16:02:00", 12,"ga"],
                        ["Carl", "2020-02-02 17:10:00", 1,"ga"],
                        ["Eric", "2020-02-01 16:o0:00", 24, "sa"]], ['ind',"date","sal","imp"])
a.show()

|  ind|               date|sal|imp|
+-----+-------------------+---+---+
|Anand|2020-02-01 16:00:00| 12| ba|
|Anand|2020-02-01 16:05:00|  7| sa|
|Anand|2020-02-02 19:10:00| 14| sa|
| Carl|2020-02-01 16:00:00| 16| da|
| Carl|2020-02-01 16:02:00| 12| ga|
| Carl|2020-02-02 17:10:00|  1| ga|
| Eric|2020-02-01 16:00:00| 24| sa|
因此,当在列 ind 上聚合并在日期(每小时)和销售平均值上重新采样时,所需的输出可能看起来像
|  ind|               date|sal|
+-----+-------------------+---+
|Anand|2020-02-01 16:00:00|  9|
|Anand|2020-02-02 19:00:00| 14|
| Carl|2020-02-01 16:00:00|  9|
| Carl|2020-02-02 17:00:00|  1|
| Eric|2020-02-01 16:00:00| 24|

最佳答案

您可以完全按照问题中已经描述的方式进行操作:group by inddate .在 date_trunc 的帮助下我们可以在分组前将日期列四舍五入到小时:

from pyspark.sql import functions as F
a.groupBy('ind', F.date_trunc('hour', F.col('date')).alias('date'))\
   .agg(F.mean('sal')) \
   .orderBy('ind', 'date') \
   .show()
打印
+-----+-------------------+--------+
|  ind|               date|avg(sal)|
+-----+-------------------+--------+
|Anand|2020-02-01 16:00:00|     9.5|
|Anand|2020-02-02 19:00:00|    14.0|
| Carl|2020-02-01 16:00:00|    14.0|
| Carl|2020-02-02 17:00:00|     1.0|
| Eric|2020-02-01 16:00:00|    24.0|
+-----+-------------------+--------+

关于pandas - pyspark:在日期和时间重新采样 pyspark 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62623157/

相关文章:

python - Pandas :删除任何列包含特定子字符串的所有行

python-3.x - 如何从大字典中列出的每个类别的所有可能的值组合中创建数据框

apache-spark - Py4JError : An error occurred while calling o90. 适合

python - pyspark更改日期时间列中的日期

pyspark - pyspark 中的数据类型验证

python - 将数据分箱到相同大小的箱中

python - 如何在 python 中使用索引按 "/"分隔符分割?

python - 如何抵消 Pandas Pearson 与日期时间索引的相关性

python - 如何找到数据框列内数组中的最大值?

hive - sparkpy 坚持根目录 :/tmp/hive on HDFS should be writable