python - 返回每个键具有最高值的行,而不会丢失 RDD 中的整行
问题描述
我开始玩 pyspark RDD 和 DF。有了 SQL 知识,我对 DF 及其 SQL 模块感到满意。但是,我正在努力过滤纯 RDD 中的行而不将其转换为 DF。在下面的示例中,我想为第一列找到最高的第三列并返回整行或仅返回第二行并按第一列排序。在 DF 中,我将按第一列使用窗口并对每一行进行排名,然后根据排名过滤行。
Data = sc.parallelize([((12, u'IL'), -1.4944293272864724),
((10, u'NM'), 14.230100203137535),
((12, u'ND'), -9.687170853837522),
((5, u'MO'), 18.73167803079034),
((12, u'NH'), -3.329505034062821)])
期望的输出
Data.collect()
[[5, u'MO', 18.73167803079034], [10, u'NM', 14.230100203137535], [12, u'IL', -1.4944293272864724]]
或者
Data.collect()
[u'MO', u'NM', u'IL']
解决方案
对于 RDD,你有专门的操作员可以做到这一点,为了在不丢失 RDD 内容的情况下实现你想要的,你可以像这样继续:
Sorted = Data.sortBy(lambda x: x[1],ascending= False)
Mapped = Sorted.map(lambda x : x[0][1])
Mapped.collect()
上述指令序列的输出将是:
['MO', 'NM', 'IL', 'NH', 'ND']
您可以使用第二条指令(地图运算符),但是您想检索任何元素,而不仅仅是您提到的标签。
如果您只想要前三个元素,而不是最后一条指令,您可以使用:
Mapped.take(3)
输出将是:
['MO', 'NM', 'IL']
推荐阅读
- html - v-for 具有相同 id 标签的动态视频会产生错误
- opencv - 如何使用 32 位色深图像转换为 pcd 或 ply 与 PCL
- wordpress - 自动将自定义分类设置为自定义帖子类型
- pandas - Pandas Dataframe 过滤并计算聚合结果
- android - 使用默认参数发送 Android Studio/Firebase 数据通知
- windows - 如何在詹金斯构建期间在批处理命令中传递特定参数
- ios - Target在Swift中分离线程的意义
- asp.net - 仅允许管理员用户访问文件夹
- c++ - 外部“C”或不外部“C” [g++ vs cl]
- javascript - 运行 mutool run script.js 时未定义“argv”