У меня есть приложение 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, он не работает, я должен поместить файлы паркета один за другим, чтобы их читал спарк