使用pyspark,将map缩减为每行最小值的项目的最佳方法是什么?
在下面的示例中,我只想采取先发生的操作:
示例数据帧:
Name | Actions |
---|---|
Alice | {1978:'aaa',1981:'bbb'} |
Jack | {1999:'xxx',1988:'yyy'} |
Bill | {1992:'zzz'} |
期望的DF:
Name | Actions |
---|---|
Alice | {1978:'aaa'} |
Jack | {1988:'yyy'} |
Bill | {1992:'zzz'} |
使用map_keys和转换为数组map_values:
from pyspark.sql.functions import *
df = spark.createDataFrame([("Name", {1978: 'aaa', 1981: 'bbb'})], ("Name", "Actions"))
df_array = df.select(
"Name",
map_keys("Actions").alias("keys"),
map_values("Actions").alias("values")
)
两者结合arrays_zip,排序array_sort:
df_array_sorted = df_array.withColumn("sorted", arrays_zip("keys", "values"))
取第一个元素并转换回map map_from_entries
df_array_sorted.select("Name", map_from_entries(array(col("sorted")[0])).alias("Actions")).show()
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。