Ограничение Spark SQL

Env: искра 1.6 с использованием Hadoop. Платформа данных Hortonworks 2.5

У меня есть таблица с 10 миллиардами записей, и я хотел бы получить 300 миллионов записей и переместить их во временную таблицу.

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

Я видел, что ключевое слово Limit на самом деле заставляет искру использовать только одного исполнителя!!! Это означает перемещение 300 миллионов записей на один узел и запись их обратно в Hadoop. Как я могу избежать этого сокращения, но при этом получить всего 300 миллионов записей, имея более одного исполнителя. Я хотел бы, чтобы все узлы записывались в hadoop.

Может ли мне в этом помочь примерка? Если да, то как?


person David H    schedule 28.02.2017    source источник
comment
какая разница какие записи? если нет, то вы можете использовать образец функции   -  person Assaf Mendelson    schedule 28.02.2017


Ответы (1)


Выборка может быть использована следующими способами: -

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

or

select ....from my_table TABLESAMPLE(30M ROWS)
person Ashish Singh    schedule 28.02.2017
comment
Hive также поддерживает ограничение ввода по количеству строк... количество строк, указанное пользователем, применяется к каждому разбиению. Таким образом, общее количество строк может варьироваться в зависимости от количества разбиений ввода... Например, следующий запрос возьмет первые 10 строк из каждого разбиения ввода... SELECT * FROM source TABLESAMPLE(10 ROWS); cwiki.apache.org/confluence/display/Hive/ - person David דודו Markovitz; 28.02.2017
comment
TABLESAMPLE(... PERCENT) — хорошее решение, ` TABLESAMPLE(... ROWS)` — нет. Последний будет использовать ту же операцию CollectLimit, которую OP пытается избежать. - person zero323; 01.03.2017