【问题标题】:Spark SQL "Limit"Spark SQL“限制”
【发布时间】:2017-07-19 15:53:57
【问题描述】:

Env:使用 Hadoop 的 spark 1.6。 Hortonworks 数据平台 2.5

我有一个包含 100 亿条记录的表,我想获取 3 亿条记录并将它们移动到一个临时表中。

sqlContext.sql("select ....from my_table limit 300000000").repartition(50)
.write.saveAsTable("temporary_table")

我看到 Limit 关键字实际上会让 spark 只使用一个执行器!!!这意味着将 3 亿条记录移动到一个节点并将其写回 Hadoop。 我怎样才能避免这种减少,但在拥有多个执行者的情况下仍然只获得 3 亿条记录。我希望所有节点都写入 hadoop。

抽样可以帮我解决这个问题吗?如果有怎么办?

【问题讨论】:

  • 哪些记录重要吗?如果没有,那么您可以使用示例函数

标签: hadoop apache-spark hive hortonworks-data-platform


【解决方案1】:

采样可以通过以下方式使用:-

select ....from my_table TABLESAMPLE(.3 PERCENT)

select ....from my_table TABLESAMPLE(30M ROWS)

【讨论】:

  • "Hive 还支持按行数限制输入...用户给出的行数应用于每个拆分。因此总行数可以根据输入拆分数而变化...例如,以下查询将从每个输入拆分中获取前 10 行 ... SELECT * FROM source TABLESAMPLE(10 ROWS); " cwiki.apache.org/confluence/display/Hive/…
  • TABLESAMPLE(... PERCENT) 是一个很好的解决方案,`TABLESAMPLE(... ROWS)` 不是。后者将使用 OP 试图避免的相同 CollectLimit 操作。
猜你喜欢
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
  • 2021-02-04
  • 2016-02-22
  • 2022-01-05
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多