python - Spark - 节点上 RDD 的相等分区
问题描述
我有一个有 4 个节点的架构和一个有 4000 行的 RDD,我需要在节点上平均地重新分区这个 RDD。结果应该是:
node 1 -> 1000 rows
node 2 -> 1000 rows
node 3 -> 1000 rows
node 4 -> 1000 rows.
我怎样才能在 Python 中做到这一点?
解决方案
我尝试使用您已经在使用的 pyspark 来实施 @sramalingam24 已经提出的解决方案。
from collections import Counter
data = [(i,j) for i,j in zip([i/1000 for i in range(0, 4000, 1)], range(500, 4500, 1))]
rdd = sc.parallelize(data).map(lambda x : (x[0], x[1]))
df = sqlContext.createDataFrame(rdd, ['key', 'values'])
df = df.repartition('key')
检查结果:
Counter(df.select(spark_partition_id()).collect())
Out[*]: Counter({Row(SPARK_PARTITION_ID()=5): 1000, Row(SPARK_PARTITION_ID()=128): 1000, Row(SPARK_PARTITION_ID()=107): 1000, Row(SPARK_PARTITION_ID()=69): 1000})
推荐阅读
- stm32 - STM32F446 HAL_UART_Receive_DMA 直接写入 GPIOA->ODR 不起作用
- scala - 在 Scala 中使用来自另一个没有数组列的 DataFrame 的数组类型列创建 Spark DataFrame 的有效方法是什么?
- visual-studio - 突出显示/选择单词并在其周围放置括号或“ VS2019
- wordpress - 如何使用 php 发送 Booster 插件模板电子邮件?
- angular - 如何防止 behaviorsubject next() 调用相互覆盖?
- javascript - NodeJS在写入后无法从telnet套接字接收数据
- asp.net - 如何在 cookie ASP.NET 中保存产品
- c# - Post Body 在策略授权中访问后丢失
- python - Pandas 在同一列中用模糊匹配替换字符串
- r - R GGMAP HTTP 400 错误请求