【发布时间】:2017-11-08 23:37:28
【问题描述】:
我有以下格式的 Pyspark 数据框:
+------------+---------+
| date | query |
+------------+---------+
| 2011-08-11 | Query 1 |
| 2011-08-11 | Query 1 |
| 2011-08-11 | Query 2 |
| 2011-08-12 | Query 3 |
| 2011-08-12 | Query 3 |
| 2011-08-13 | Query 1 |
+------------+---------+
我需要将其转换为将每个唯一查询转换为按日期分组的列,并将每个查询的计数插入数据框的行中。我希望输出是这样的:
+------------+---------+---------+---------+
| date | Query 1 | Query 2 | Query 3 |
+------------+---------+---------+---------+
| 2011-08-11 | 2 | 1 | 0 |
| 2011-08-12 | 0 | 0 | 2 |
| 2011-08-13 | 1 | 0 | 0 |
+------------+---------+---------+---------+
我正在尝试以this answer 为例,但我不太了解代码,尤其是make_row 函数中的return 语句。
有没有办法在转换 DataFrame 时计算查询? 也许像
import pyspark.sql.functions as func
grouped = (df
.map(lambda row: (row.date, (row.query, func.count(row.query)))) # Just an example. Not sure how to do this.
.groupByKey())
这是一个可能包含数十万行和查询的数据框,因此我更喜欢 RDD 版本而不是使用 .collect() 的选项
谢谢!
【问题讨论】:
标签: python apache-spark dataframe pyspark apache-spark-sql