如何在限制行数的同时拆分Pyspark数据帧?

时间:2020-05-06 23:56:46

标签: apache-spark pyspark

我正在将数据从数据帧发送到具有50,000行限制的API。假设我的数据框有70,000行,如何将其拆分为单独的数据框,每个数据框的最大行数为50,000?这些不必是偶数,数据顺序也没关系。

2 个答案:

答案 0 :(得分:1)

解决方法可以是使用.limit()函数。您可以执行以下操作:假设您有70k行的主df是original_df。因此,您可以像

limited_df = df.limit(50000)

第一次获得5万行,接下来的行可以

original_df.subtract(limited_df)

,您将获得剩余的行。如果需要,您甚至还可以对减去的df做.limit()。

更新: 您可以对数据帧中存在的任何行数执行此操作。让我们说一下,如果您的数据帧中有30000行,如果您执行了df.limit(50000),则不会抛出任何错误,只会返回数据帧中存在的3万行。

答案 1 :(得分:0)

您可以通过使用row_number然后每隔50000行进行拆分来实现以下目的

#order by any column to populate the row number
window=Window.orderBy('ID')
length=df1.count()
df2=df1.withColumn('row',f.row_number().over(window))

step=50000
for i in range(1,length,step):
    df3 = df2.filter((f.col('row')>=i) & (f.col('row')<=i+step-1))
    #Here perform your API call as it will contain only 50000 rows at one time