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


Answers

Используя некоторый контекст искры или контекстный метод sc.textFile() ( sc.textFile() , hc.sql() ) для чтения данных в память, возвращает RDD, но RDD остается в распределенной памяти (память на рабочих узлах), а не в памяти на главный узел. Все методы RDD ( rdd.map() , rdd.reduceByKey() и т. Д.) Предназначены для параллельной работы на рабочих узлах с некоторыми исключениями. Например, если вы запустите метод rdd.collect() , вы в конечном итоге скопируете содержимое rdd из всех рабочих узлов в память главного узла. Таким образом, вы теряете свои распределенные вычислительные преимущества (но все равно можете запускать методы rdd).

Аналогично toPandas() , когда вы запускаете toPandas() , вы копируете фрейм данных из распределенной (рабочей) памяти в локальную (основную) память и теряете большую часть своих распределенных вычислительных возможностей. Таким образом, один возможный рабочий процесс (который я часто использую) может состоять в том, чтобы предварительно преобразовать ваши данные в разумный размер с использованием распределенных методов вычисления, а затем преобразовать в кадр данных Pandas для богатого набора функций. Надеюсь, это поможет.

Question

Я новичок в Spark-DataFrame API.

Я использую этот код для загрузки 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 и просто сделать с ним, не касаясь API DataFrame?



Links