【发布时间】:2021-10-23 21:31:30
【问题描述】:
我想使用 pyspark 在大约 15 亿行的 hive 表上进行分页。我遇到了一种使用 ROW_NUMBER() 的解决方案。当我尝试它时,我的内存不足。不确定 spark 是否试图将完整的表引入它的内存,然后进行分页。
在那之后,我在 Hive SQL (https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select#LanguageManualSelect-LIMITClause) 中遇到了这个 LIMIT 子句并尝试了它。但它在 spark 中失败了,我发现的原因是 spark.sql() 中不完全支持 hiveQL。 Spark SQL 限制不支持偏移量的多个参数 -> https://spark.apache.org/docs/3.0.0/sql-ref-syntax-qry-select-limit.html
有什么好的方法可以使用 spark 进行分页吗?
PS:hive 表没有 ID 列,我可以使用它进行排序和分页。 :)
【问题讨论】:
-
您想对
collect的输出进行分页吗? -
不。应用于 ROW_NUMBER() 查询时的 collect() 会占用时间。因此,想检查是否可以为分页执行任何其他查询
-
如果您只想要部分数据,可以使用
show。 -
show() 是用于打印的吗?我的用例是在对其进行一些操作后将行从源转换为另一种格式。
-
Spark 不是用来向 python 传输数据的。当然,您可以使用
collect来完成,但整个目的是读取数据、转换它们并使用df.write将数据写入某处。所以我不明白你想做什么......
标签: apache-spark pyspark hive apache-spark-sql hiveql