pySpark - избегать обработки одной строки за раз

Я использую специальную функцию, которая получает NumPy ndarray вектор, и дает другой ndarray той же длины, что и результаты.

Используя Spark map, я могу запустить эту функцию в каждой строке моих входных данных, что неэффективно, потому что функция обрабатывает векторы одного элемента каждый раз.

Можно ли обрабатывать большие объемы данных в Spark? Имея, например, (большую) часть входных данных на одном компьютере, а другую часть данных на другом компьютере, я мог бы передать все строки, доступные на каждом компьютере, одновременно для своей функции как ndarray для эффективного расчета?

1 ответ

Решение

Не ясно, какие виды расчетов вам нужно выполнить.

mapPartitions может обрабатывать каждый больший кусок, но внутри этого блока вы все равно будете использовать map или другие операции для преобразования ваших данных.

Примечание. Однако если вы сравниваете Spark с Numpy, вы будете использовать операции DataFrame в SparkSQL, и все данные будут прозрачно перетасовываться между серверами.

Если у вас есть два DataFrames, вы, вероятно, присоединитесь к ним перед выполнением каких-либо операций.

За кулисами нет способа избежать рассмотрения каждого элемента, независимо от того, собираете ли вы, преобразовываете или иным образом собираете обратно в локальную коллекцию.

Другие вопросы по тегам