python - 顺序 (k,) RDD
问题描述
我有以下形式的rdd:
rdd = sc.parallelize([(2, [199.99, 250.0, 129.99]),
(4, [49.98, 299.95, 150.0, 199.92]),
(8, [179.97, 299.95, 199.92, 50.0]),
(10, [199.99, 99.96, 129.99, 21.99, 199.99]),
(12, [299.98, 100.0, 149.94, 499.95, 250.0])])
我需要将其展平为这种形式:
2,199.99
2,250.0
2,12.99
4,49.98
4.299.95
...
它还必须按第一个或第二个字段排序。
如何做到这一点?
谢谢。
解决方案
您可以像这样使用 flatMap:
rdd = sc.parallelize([(2, [199.99, 250.0, 129.99]),
(4, [49.98, 299.95, 150.0, 199.92]),
(8, [179.97, 299.95, 199.92, 50.0]),
(10, [199.99, 99.96, 129.99, 21.99, 199.99]),
(12, [299.98, 100.0, 149.94, 499.95, 250.0])])
print rdd.flatMap(lambda x: [(x[0], y) for y in x[1]])\
.sortBy(lambda x: (x[0], x[1])).collect()
[(2, 129.99), (2, 199.99), (2, 250.0), (4, 49.98), (4, 150.0), (4, 199.92), (4, 299.95), (8, 50.0), ( 8, 179.97), (8, 199.92), (8, 299.95), (10, 21.99), (10, 99.96), (10, 129.99), (10, 199.99), (10, 199.99), (12, 100.0), (12, 149.94), (12, 250.0), (12, 299.98), (12, 499.95)]
推荐阅读
- javascript - 如何在移动到下一张幻灯片之前使幻灯片持续很长时间以及如何将点移动到幻灯片的左上角
- python - 列出从一到一百万的数字,然后使用 for 循环打印数字
- gcc - 运行 gcc 时使用不同的链接器
- python - 检查模型输入时出错:预期 conv1d_1_input 的形状为 (None, 441, 216) 但得到的数组形状为 (1, 441, 216)
- angular - 在返回 API 的响应并且用户导航到不同的页面后,是否可以向用户显示通知?
- java - 从 recyclerView 中的 EditText、CheckBox 和 TextView 中获取值
- android - Android过滤TableView中的多列
- excel - 多条件条件格式问题
- android - 使用意图创建事件 ID 后获取事件 ID
- python-3.x - CVXPY 整数规划返回非整数解