如何在pyspark中从数据帧中选择一系列行

如何在pyspark中从数据帧中选择一系列行,pyspark,apache-spark-sql,Pyspark,Apache Spark Sql,我有一个10609行的数据帧,我想一次将100行转换为JSON并将它们发送回Web服务 我尝试过使用SQL like的LIMIT子句 temptable = spark.sql("select item_code_1 from join_table limit 100") 这将返回前100行,但是如果我想要下100行,我尝试了这个方法,但没有成功 temptable = spark.sql("select item_code_1 from join_table l

我有一个10609行的数据帧,我想一次将100行转换为JSON并将它们发送回Web服务

我尝试过使用SQL like的LIMIT子句

temptable = spark.sql("select item_code_1 from join_table limit 100")
这将返回前100行,但是如果我想要下100行,我尝试了这个方法,但没有成功

temptable = spark.sql("select item_code_1 from join_table limit 100, 200")
错误:Py4JJavaError:调用o22.sql时出错: org.apache.spark.sql.catalyst.parser.ParseException:输入不匹配 “,”预期(第1行,位置44)

==SQL==

select item_code_1 from join_table limit 100, 200

您必须创建一个行号列,该列将为列分配序号,并使用该列通过过滤器获取范围内的数据

df = spark.createDataFrame([('a',),
                            ('b',),
                            ('c',),
                            ('d',),
                            ('e',)
                            ],'item : string')
df.show()

#+----+
#|item|
#+----+
#|   a|
#|   b|
#|   c|
#|   d|
#|   e|
#+----+
我正在使用一个虚拟静态列
lit('a')
来生成行数。请根据实际数据更新以下逻辑(这将生成行数)

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|
#+----+-------+
Spark SQL示例-

df1.createOrReplaceTempView("dfTable")

spark.sql("SELECT * FROM dfTable WHERE row_num between 1 and 2").show()

#+----+-------+
#|item|row_num|
#+----+-------+
#|   a|      1|
#|   b|      2|
#+----+-------+

可能是重复的谢谢。这将给我前n行,但不是中间位置的n行。我已经编辑了我的答案,现在您可以将范围传递到特定数量的记录。确保根据实际数据修改行数的逻辑。