Spark SQL"限制"

Dav*_*d H 3 hadoop hive hortonworks-data-platform apache-spark

环境:使用Hadoop的spark 1.6.Hortonworks数据平台2.5

我有一张包含100亿条记录的表格,我想获得3亿条记录并将它们移到临时表格中.

sqlContext.sql("select ....from my_table limit 300000000").repartition(50)
.write.saveAsTable("temporary_table")
Run Code Online (Sandbox Code Playgroud)

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

抽样可以帮助我吗?如果是这样的话?

小智 5

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

select ....from my_table TABLESAMPLE(.3 PERCENT)
Run Code Online (Sandbox Code Playgroud)

要么

select ....from my_table TABLESAMPLE(30M ROWS)
Run Code Online (Sandbox Code Playgroud)

  • `TABLESAMPLE(... PERCENT)`是一个很好的解决方案,`TABLESAMPLE(... ROWS)`不是。后者将使用OP试图避免的相同“ CollectLimit”操作。 (2认同)