gpt4 book ai didi

pyspark - 如何从pyspark的数据框中选择一系列行

转载 作者:行者123 更新时间:2023-12-04 02:49:29 24 4
gpt4 key购买 nike

我有一个包含 10609 行的数据框,我想一次将 100 行转换为 JSON 并将它们发送回网络服务。
我曾尝试使用 SQL 的 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")

Error: Py4JJavaError: An error occurred while calling o22.sql. :org.apache.spark.sql.catalyst.parser.ParseException: mismatched input',' expecting (line 1, pos 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')生成 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|
#+----+-------+

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|
#+----+-------+

关于pyspark - 如何从pyspark的数据框中选择一系列行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55690705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com