首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按行索引拆分Spark数据帧

按行索引拆分Spark数据帧
EN

Stack Overflow用户
提问于 2018-02-21 07:53:47
回答 1查看 4.1K关注 0票数 2

我想按行顺序拆分数据帧。如果有100行,则期望分割成4个相等的数据帧应分别具有索引0-2425-4950-7475-99

唯一可用的预定义函数是randomSplit。但randomSplit在拆分之前会对数据进行随机化。我想到的另一种方法是使用count归约操作找到数据计数,然后使用take继续提取数据,但这非常昂贵。有没有其他方法可以在保持相同顺序的情况下实现上述目标?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-21 08:50:57

您可以使用monotonically_increasing_id来获取行号(如果您还没有行号),然后在行号窗口上使用ntile,以拆分成您想要的任意数量的分区:

代码语言:javascript
复制
from pyspark.sql.window import Window
from pyspark.sql.functions import monotonically_increasing_id, ntile

values = [(str(i),) for i in range(100)]
df = spark.createDataFrame(values, ('value',))

def split_by_row_index(df, num_partitions=4):
    # Let's assume you don't have a row_id column that has the row order
    t = df.withColumn('_row_id', monotonically_increasing_id())
    # Using ntile() because monotonically_increasing_id is discontinuous across partitions
    t = t.withColumn('_partition', ntile(num_partitions).over(Window.orderBy(t._row_id))) 
    return [t.filter(t._partition == i+1).drop('_row_id', '_partition') for i in range(partitions)]

[i.collect() for i in split_by_row_index(df)]
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48896113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档