Время, затраченное на создание RDD Vs. Фрейм данных из файла HDFS - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть файл на HDFS с конфигурациями ниже размера блока.

Status: HEALTHY  Total size:    1172387607850 B  Total dirs:    0  Total files:   1  Total symlinks:                0  Total blocks (validated):      8735 (avg. block size 134217241 B)  Minimally replicated blocks:   8735 (100.0 %)  Over-replicated blocks:        0 (0.0 %)  Under-replicated blocks:       0 (0.0 %)  Mis-replicated blocks:         0 (0.0 %)  Default replication factor:    3  Average block replication:     3.0  Corrupt blocks:                0  Missing replicas:              0 (0.0 %)  Number of data-nodes:          16  Number of racks:               1 FSCK ended at Tue Oct 30 02:30:04 EDT 2018 in 75 milliseconds  

Я попытался создать RDD, используя данный файл, с помощью простой команды

rdd1 = sqlContext.textFile("File HDFS path")  
rdd1.take(50)

Эта команда выполнялась в миллисекундах

Затем я попытался создать Dataframe, используя тот же файл. Это заняло много времени, так как количество созданных задач - 8735 (Нет блоков в файле).

data_df = spark.read.format("com.databricks.spark.csv") \
  .option("header", "false") \
  .option("inferschema", "true") \
  .option("delimiter", "|").load(HDFS_FILE_PATH)

Количество разделов в кадре данных и RDD одинаково (8735).
Что может быть причиной потери времени при создании кадра данных.

1 Ответ

0 голосов
/ 01 ноября 2018

Вы сравниваете код СДР

  • , который не выводит схему,
  • без разбора за пределами поиска новых строк,
  • и читает только первые 50 строк (вероятно, не более одного раздела).

и Dataset код

  • , который должен проанализировать все записи (прочитать все строки файла)
  • и выведите схему.

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

...