Вам необходимо создать столбец с номером строки, который будет присваивать порядковый номер столбцу, и использовать этот столбец для выборки данных в диапазоне через фильтр.
df = spark.createDataFrame([('a',),
('b',),
('c',),
('d',),
('e',)
],'item : string')
df.show()
#+----+
#|item|
#+----+
#| a|
#| b|
#| c|
#| d|
#| e|
#+----+
Я использую фиктивный статический столбец lit('a')
для генерации row_num.Обновите приведенную ниже логику (это генерирует row_num) на основе ваших фактических данных.
partitionBy(lit('a')).orderBy(lit('a')
Пример кадра данных-
from pyspark.sql.functions import lit,row_number,col
from pyspark.sql.window import Window
w = Window().partitionBy(lit('a')).orderBy(lit('a'))
df1 = df.withColumn("row_num", row_number().over(w))
df1.filter(col("row_num").between(1,2)).show()
#+----+-------+
#|item|row_num|
#+----+-------+
#| a| 1|
#| b| 2|
#+----+-------+
df1.filter(col("row_num").between(3,4)).show()
#+----+-------+
#|item|row_num|
#+----+-------+
#| c| 3|
#| d| 4|
#+----+-------+
Пример SQL Spark-
df1.createOrReplaceTempView("dfTable")
spark.sql("SELECT * FROM dfTable WHERE row_num between 1 and 2").show()
#+----+-------+
#|item|row_num|
#+----+-------+
#| a| 1|
#| b| 2|
#+----+-------+