Подтвердить что ты не робот

Что такое метод Spark DataFrame `toPandas` на самом деле?

Я начинающий API Spark-DataFrame.

Я использую этот код для загрузки csv-разделов в Spark Dataframe

lines = sc.textFile('tail5.csv')
parts = lines.map(lambda l : l.strip().split('\t'))
fnames = *some name list*
schemaData = StructType([StructField(fname, StringType(), True) for fname in fnames])
ddf = sqlContext.createDataFrame(parts,schemaData)

Предположим, что я создаю DataFrame с Spark из новых файлов и конвертирую его в pandas с помощью встроенного метода toPandas(),

  • Сохраняет ли объект pandas в локальной памяти?
  • Выполняется ли pandas низкоуровневое вычисление с помощью Spark?
  • Обнаруживает ли он все функциональные возможности фреймов pandas (я думаю, да)
  • Могу ли я преобразовать его в Pandas и просто сделать с ним, не касаясь API DataFrame?
4b9b3361

Ответ 1

Использование искры для чтения в CSV файле до pandas - довольно обходной метод для достижения конечной цели чтения CSV файла в память.

Похоже, что вы можете ошибаться в использовании вариантов использования технологий здесь.

Spark предназначен для распределенных вычислений (хотя он может использоваться локально). Он вообще слишком тяжелый, чтобы его можно было просто читать в CSV файле.

В вашем примере метод sc.textFile просто даст вам искровое RDD, которое фактически представляет собой список текстовых строк. Скорее всего, это не то, что вы хотите. Никакой запрос типа не будет выполнен, поэтому, если вы хотите суммировать столбец чисел в вашем CSV файле, вы не сможете этого сделать, поскольку они все еще являются строками до Spark.

Просто используйте pandas.read_csv и прочитайте весь CSV в памяти. Pandas автоматически выводит тип каждого столбца. Спарк не делает этого.

Теперь, чтобы ответить на ваши вопросы:

Сохраняет ли объект Pandas в локальной памяти:

Да. toPandas() преобразует Spark DataFrame в Pandas DataFrame, который, конечно, находится в памяти.

Выполняется ли Pandas низкоуровневое вычисление с помощью Spark

Нет. Pandas запускает собственные вычисления, нет взаимодействия между искрами и pandas, там просто некоторая совместимость с API.

Обнаруживает ли он все функциональные возможности Pandas данных?

Нет. Например, Series объекты имеют метод interpolate, который недоступен в объектах PySpark Column. Существует много методов и функций, которые находятся в API Pandas, которые не входят в API PySpark.

Могу ли я преобразовать его в Pandas и просто сделать с ним, не касаясь API DataFrame?

Совершенно верно. Фактически, вы, вероятно, вообще не должны использовать Spark в этом случае. pandas.read_csv скорее всего обработает ваш случай использования, если вы не работаете с огромным количеством данных.

Постарайтесь решить свою проблему с помощью простых, малотехнологичных, понятных библиотек и переходите к чему-то более сложному, когда вам это нужно. Много раз вам не понадобится более сложная технология.