Spark - невозможно сохранить фрейм данных на диск - PullRequest
0 голосов
/ 12 мая 2018

Я запускаю Spark в автономном режиме с каталогом Hive.Я пытаюсь загрузить данные из внешнего документа и затем сохранить их обратно на диск в формате Parquet.

rdd = sc \
    .textFile('/data/source.txt', NUM_SLICES) \
    .map(lambda x: (x[:5], x[6:12], gensim.utils.simple_preprocess(x[13:]))) 

schema = StructType([
    StructField('c1', StringType(), False),
    StructField('c2', StringType(), False),
    StructField('c3', ArrayType(StringType(), True), False),
])

data = sql_context.createDataFrame(rdd, schema)

data.write.mode('overwrite').parquet('/data/some_dir')

Когда я пытаюсь прочитать этот файл обратно, происходит сбой с:

AnalysisException: 'Unable to infer schema for Parquet. It must be specified manually.;'

То, что он не может просто проанализировать местоположение или файлы.

Теперь, если я посмотрю на местоположение на всех 3 рабочих узлах, оно выглядит следующим образом:

clush -ab 'locate some_file'
---------------
master
---------------
/data/some_file
/data/some_file/._SUCCESS.crc
/data/some_file/_SUCCESS
---------------
worker1
---------------
/data/some_file
/data/some_file/_temporary
/data/some_file/_temporary/0
/data/some_file/_temporary/0/_temporary
/data/some_file/_temporary/0/task_20180511211832_0010_m_000000
/data/some_file/_temporary/0/task_20180511211832_0010_m_000039
/data/some_file/_temporary/0/task_20180511211832_0010_m_000000/.part-00000-1b2764a6-28a3-4ba2-9493-766074eef4d5-c000.snappy.parquet.crc
/data/some_file/_temporary/0/task_20180511211832_0010_m_000000/part-00000-1b2764a6-28a3-4ba2-9493-766074eef4d5-c000.snappy.parquet
/data/some_file/_temporary/0/task_20180511211832_0010_m_000039/.part-00039-1b2764a6-28a3-4ba2-9493-766074eef4d5-c000.snappy.parquet.crc
/data/some_file/_temporary/0/task_20180511211832_0010_m_000039/part-00039-1b2764a6-28a3-4ba2-9493-766074eef4d5-c000.snappy.parquet
---------------
worker2
---------------
/data/some_file
/data/some_file/_temporary
/data/some_file/_temporary/0
/data/some_file/_temporary/0/_temporary
/data/some_file/_temporary/0/task_20180511211832_0010_m_000011
/data/some_file/_temporary/0/task_20180511211832_0010_m_000017
/data/some_file/_temporary/0/task_20180511211832_0010_m_000029
/data/some_file/_temporary/0/task_20180511211832_0010_m_000038
/data/some_file/_temporary/0/task_20180511211832_0010_m_000011/.part-00011-1b2764a6-28a3-4ba2-9493-766074eef4d5-c000.snappy.parquet.crc
/data/some_file/_temporary/0/task_20180511211832_0010_m_000011/part-00011-1b2764a6-28a3-4ba2-9493-766074eef4d5-c000.snappy.parquet
/data/some_file/_temporary/0/task_20180511211832_0010_m_000017/.part-00017-1b2764a6-28a3-4ba2-9493-766074eef4d5-c000.snappy.parquet.crc
/data/some_file/_temporary/0/task_20180511211832_0010_m_000017/part-00017-1b2764a6-28a3-4ba2-9493-766074eef4d5-c000.snappy.parquet
/data/some_file/_temporary/0/task_20180511211832_0010_m_000029/.part-00029-1b2764a6-28a3-4ba2-9493-766074eef4d5-c000.snappy.parquet.crc
/data/some_file/_temporary/0/task_20180511211832_0010_m_000029/part-00029-1b2764a6-28a3-4ba2-9493-766074eef4d5-c000.snappy.parquet
/data/some_file/_temporary/0/task_20180511211832_0010_m_000038/.part-00038-1b2764a6-28a3-4ba2-9493-766074eef4d5-c000.snappy.parquet.crc
/data/some_file/_temporary/0/task_20180511211832_0010_m_000038/part-00038-1b2764a6-28a3-4ba2-9493-766074eef4d5-c000.snappy.parquet
---------------
worker3
---------------
/data/some_file
/data/some_file/_temporary
/data/some_file/_temporary/0
/data/some_file/_temporary/0/_temporary
/data/some_file/_temporary/0/task_20180511211832_0010_m_000040
/data/some_file/_temporary/0/task_20180511211832_0010_m_000043
/data/some_file/_temporary/0/task_20180511211832_0010_m_000046
/data/some_file/_temporary/0/task_20180511211832_0010_m_000040/.part-00040-1b2764a6-28a3-4ba2-9493-766074eef4d5-c000.snappy.parquet.crc
/data/some_file/_temporary/0/task_20180511211832_0010_m_000040/part-00040-1b2764a6-28a3-4ba2-9493-766074eef4d5-c000.snappy.parquet
/data/some_file/_temporary/0/task_20180511211832_0010_m_000043/.part-00043-1b2764a6-28a3-4ba2-9493-766074eef4d5-c000.snappy.parquet.crc
/data/some_file/_temporary/0/task_20180511211832_0010_m_000043/part-00043-1b2764a6-28a3-4ba2-9493-766074eef4d5-c000.snappy.parquet
/data/some_file/_temporary/0/task_20180511211832_0010_m_000046/.part-00046-1b2764a6-28a3-4ba2-9493-766074eef4d5-c000.snappy.parquet.crc
/data/some_file/_temporary/0/task_20180511211832_0010_m_000046/part-00046-1b2764a6-28a3-4ba2-9493-766074eef4d5-c000.snappy.parquet

Я не могу понять, почему это сохраняет это в «_theorary», а не в постоянной папке.

Дайте мне знать, если вам нужен дополнительный контекст.

Спасибо

1 Ответ

0 голосов
/ 12 мая 2018

TL; DR Для сохранения и загрузки данных в распределенном режиме вам потребуется распределенная файловая система. Локальное хранилище недостаточно.

Я не могу понять, почему он сохраняет это в '_theorary', а не в постоянной папке.

Это потому, что у вас нет распределенной файловой системы. В этом случае каждый исполнитель может закончить свою собственную часть, но Spark не сможет правильно завершить работу.

Кроме того, поскольку каждый исполнитель имеет доступ только к части результата, загрузка данных обратно с помощью Spark невозможна.

...