Как разделить фрейм данных Pyspark при ограничении количества строк? - PullRequest
0 голосов
/ 07 мая 2020

Я отправляю данные из фрейма данных в API, у которого есть ограничение в 50 000 строк. Скажем, мой фрейм данных содержит 70 000 строк, как я могу разделить его на отдельные фреймы данных, каждый с максимальным количеством строк 50 000? Они не должны быть четными, и порядок данных не имеет значения.

Ответы [ 2 ]

1 голос
/ 11 мая 2020

Временным решением для этого может быть использование функции .limit(). Вы можете сделать что-то вроде: допустим, ваш основной df с 70 тыс. Строк - original_df. Таким образом, вы можете сделать как

limited_df = df.limit(50000)

в первый раз, чтобы получить 50 тыс. Строк, а для следующих строк вы можете сделать

original_df.subtract(limited_df)

, и вы получите оставшиеся строки. Вы даже можете сделать .limit () для вычтенного df, если это необходимо.

ОБНОВЛЕНО: Вы можете сделать это для любого количества строк, присутствующих во фрейме данных. Скажем, в какой-то момент, если ваш фрейм данных имеет 30000 строк, и если вы сделали df.limit (50000), он не вызовет никаких ошибок и просто вернет 30 тысяч строк, присутствующих во фрейме данных.

0 голосов
/ 11 мая 2020

Вы можете достичь следующего, используя 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 

...