我有这样的数据框,我需要创建输出数据框,它将有这个列,但它的值将是值和它们的计数的Map:
df = spark.createDataFrame(
[('new',), ('new',), ('old',)],
["x"]
)
我已经尝试了很多东西,最接近的是这给了我2行,但我需要它在一行:
agg = df.groupBy("x").agg(F.count("*").alias("count"))
agg.select(F.create_map(agg["x"], agg["count"]).alias("counts")).show()
但是我想创建这样的输出,所以基本上它的模式将是MapType(StringType(),IntegerType()),True):
+--------------------+
| counts|
+--------------------+
|{new -> 2, old -> 1}|
+--------------------+
任何帮助感激不尽。
3条答案
按热度按时间isr3a4wc1#
代码
结果
详情
{new, 2}
map_from_entries
从结构体列表中创建一个Mapaamkag612#
可以在透视聚合之后创建Map列。
knpiaxh13#
我迟到了,但这里是另一个版本使用
create_map
create_map
需要key1,val1,key2,val2,ley3,val3...
来创建Map,我们使用列表解析来生成列表输出: