【问题标题】:How to paginate hive table in spark?如何在火花中对蜂巢表进行分页?
【发布时间】: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


【解决方案1】:

spark的基本使用:

# Extract the data
df = spark.read.table("my_table")

# Transform the data
df = df.withColumn("new_col", some_transformation())

# Load the data
df.write ... # write wherever you want

【讨论】:

  • 我的用例是将数据写入另一个数据库本身。亚马逊极光数据库
  • 和?你有很多连接器可以将 spark 连接到其他数据库......你的问题是什么?
  • @ZeeshanShamsuddeen amazon aurora 是 mysql 对吗?您可以使用 jdbc 编写。
  • 我也有一些用例,我将从 Hive 表中读取 N 行......并将在所有行之上执行复杂的 reduce 函数。并且只将减少的结果写入数据库
  • @ZeeshanShamsuddeen 是吗?同样,这不是问题。回来有一个真正的问题。我目前看不到是什么阻碍了你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 2019-08-15
  • 2020-09-01
  • 1970-01-01
相关资源
最近更新 更多