开发者社区> 问答> 正文

我应该使用哪种转换来将map缩减为每行最小值的项目?

使用pyspark,将map缩减为每行最小值的项目的最佳方法是什么?

在下面的示例中,我只想采取先发生的操作:

示例数据帧:

NameActions
Alice{1978:'aaa',1981:'bbb'}
Jack{1999:'xxx',1988:'yyy'}
Bill{1992:'zzz'}

期望的DF:

NameActions
Alice{1978:'aaa'}
Jack{1988:'yyy'}
Bill{1992:'zzz'}

展开
收起
社区小助手 2018-12-06 15:29:45 1468 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    使用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()

    +----+-------------+

    |Name| Actions|

    +----+-------------+

    |Name|[1981 -> bbb]|

    +----+-------------+

    2019-07-17 23:18:34
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
用计算和数据去改变整个世界 立即下载
重新定义计算的边界 立即下载
低代码开发师(初级)实战教程 立即下载