如何获得地图/dict列中每个项目的总计数百分比?
我有一个看起来像这样的pyspark dataframe,我有一个地图数据类型列映射< str,int>
Date Item (Map<Str,int>) Total Items
2021-02-01 Item_A -> 3, Item_B -> 10, Item_C -> 2 15
2021-02-02 Item_A -> 1, Item_B -> 5, Item_C -> 7 13
2021-02-03 Item_A -> 8, Item_B -> 3, Item_C -> 1 12
我想创建一个新列,该列为我从项目总数中获得的单个项目优势百分比。 item_a /项目总数等所有其他项目。 最终的列也应该是地图。
我想要这样的东西:
Date Item (Map<Str,int>) Total Items Item count %
(item/total items)*100
2021-02-01 Item_A -> 3, Item_B -> 10, Item_C -> 5 15 Item_A -> 20%, Item_B -> 66%, Item_c -> 33%
2021-02-02 Item_A -> 1, Item_B -> 5, Item_C -> 7 13 Item_A -> 7%, Item_B -> 38%, Item_C -> 53%
2021-02-03 Item_A -> 8, Item_B -> 3, Item_C -> 1 12 Item_A -> 66%, Item_B -> 25%, Item_C -> 8.3%
我的方法:
df = df.withColumn('Item_count_percentage', F.expr('aggregate(map_values(Item), 0 , (acc, x) -> (acc / int(x)/100)'))
df.show(truncate=False)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
火花3.0+
使用
spark 2.4+
重新创建地图(
map_from_arrays
)首先提取键( ,然后值(map_values
)并应用高订单功能(transform
)上的值。Spark 3.0+
Making use of
transform_values
Spark 2.4+
Recreating the map (
map_from_arrays
) by first extracting keys (map_keys
), then values (map_values
) and applying a higher order function (transform
) on values.