Spark: невозможно загрузить файлы паркета из HDFS до тех пор, пока они не будут «помещены» в hdfs - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть приложение ac #, которое создает и загружает файлы паркета в удаленную HDFS.Если я скопирую файл с помощью scp на целевую машину с установленным клиентом HDFS, а затем "hdfs поместит" файл в HDFS, spark сможет правильно прочитать файл.

Если я загружаю файл напрямую в HDFS из клиентского приложения, используя curl для служб webhdf, я получаю следующую ошибку от Spark при попытке прочитать файл паркета:

df = sqlContext.read.parquet ("/ tmp / test.parquet") Traceback (последний вызов был последним): файл "", строка 1, в файле "/ usr / hdp / current / spark2-client /python / pyspark / sql / readwriter.py ", строка 303, в паркет возвращается self._df (self._jreader.parquet (_to_seq (self._spark._sc, paths))) Файл" / usr / hdp / current / spark2-client / python / lib / py4j-0.10.7-src.zip / py4j / java_gateway.py ", строка 1257, в вызов файл" / usr / hdp / current / spark2-client / python / pyspark/sql/utils.py ", строка 69, в деке вызывает функцию AnalysisException (s.split (':', 1) [1], stackTrace) pyspark.sql.utils.AnalysisException: u'Не удается вывести схему для Parquet.Он должен быть указан вручную.; '

Если я извлекаю оба файла (загруженный scp и файл, загруженный через curl) в локальную файловую систему и делаю двоичный файл между нимифайлы, diff не показывает никакой разницы.Если я снова помещу файл в HDFS (тот, который был загружен с помощью curl и webhdfs), то Spark сможет хорошо прочитать файл паркета.

Это что-то вроде "hdfs put", сделав какую-то магию, чтобы сделатьСпарк хорошо прочитал паркетный файл.

Что может происходить?Спасибо

ОБНОВЛЕНИЕ: Если я получаю локальный каталог с несколькими паркетами и снова помещаю его в HDFS, он не работает, я должен поместить файлы паркета один за другим, чтобы их читал спарк

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Я наконец выяснил причину ошибки.Название загружаемых файлов начинается с символа «_».Это была причина, почему спарк не смог загрузить файл паркета.

0 голосов
/ 04 декабря 2018

Проверяли ли вы, чтобы службы webhdfs помещали файл по тому же пути (/tmp/test.parquet)?Другими словами, можете ли вы загрузить файл (который был загружен через webhdfs) с помощью клиента hdfs (hdfs get)?

Bests, fej

...