У меня был правильный паркетный файл (уверен на 100%) и только один файл в этой директории v3io://projects/risk/FeatureStore/ptp/parquet/sets/ptp/1681296898546_70/
. Я получил эту общую ошибку AnalysisException: Unable to infer schema ...
во время операции чтения, см. полную информацию об ошибке:
---------------------------------------------------------------------------
AnalysisException Traceback (most recent call last)
<ipython-input-26-5beebfd65378> in <module>
1 #error
----> 2 new_DF=spark.read.parquet("v3io://projects/risk/FeatureStore/ptp/parquet/")
3 new_DF.show()
4
5 spark.close()
/spark/python/pyspark/sql/readwriter.py in parquet(self, *paths, **options)
299 int96RebaseMode=int96RebaseMode)
300
--> 301 return self._df(self._jreader.parquet(_to_seq(self._spark._sc, paths)))
302
303 def text(self, paths, wholetext=False, lineSep=None, pathGlobFilter=None,
/spark/python/lib/py4j-0.10.9.3-src.zip/py4j/java_gateway.py in __call__(self, *args)
1320 answer = self.gateway_client.send_command(command)
1321 return_value = get_return_value(
-> 1322 answer, self.gateway_client, self.target_id, self.name)
1323
1324 for temp_arg in temp_args:
/spark/python/pyspark/sql/utils.py in deco(*a, **kw)
115 # Hide where the exception came from that shows a non-Pythonic
116 # JVM exception message.
--> 117 raise converted from None
118 else:
119 raise
AnalysisException: Unable to infer schema for Parquet. It must be specified manually.
Я использовал этот код:
new_DF=spark.read.parquet("v3io://projects/risk/FeatureStore/ptp/parquet/")
new_DF.show()
странно, что это работало правильно, когда я использовал полный путь к файлу паркета:
new_DF=spark.read.parquet("v3io://projects/risk/FeatureStore/ptp/parquet/sets/ptp/1681296898546_70/")
new_DF.show()
У вас была похожая проблема?
Я бы согласился с @AbdennacerLachiheb, это ошибка, которую вы, вероятно, получите, если не все файлы имеют одинаковую схему. Проверьте файлы еще раз.
Есть только один файл с валидным контактом и это странно
Ошибка возникает из-за того, что файл паркета находится не в папке "v3io://projects/risk/FeatureStore/ptp/parquet/"
, а в папке "v3io://projects/risk/FeatureStore/ptp/parquet/sets/ptp/1681296898546_70/"
.
Это будет работать:
new_DF=spark.read.parquet("v3io://projects/risk/FeatureStore/ptp/parquet/*/*/*")
new_DF.show()
Синтаксис *
читает все в каталоге.
Для получения дополнительной информации о массовом чтении файлов с помощью spark.read
проверьте этот вопрос:
Регулярное выражение для даты между датой начала и датой окончания
Обычно вы никогда не должны видеть эту ошибку при чтении паркета, потому что схема уже находится в файле паркета, по моему опыту, вот несколько причин, по которым вы видите эту ошибку:
Паркет, который вы пытаетесь прочитать, по какой-то странной причине пуст. искра выдает эту ошибку, когда паркет пуст, однако это не кажется проблемой, так как у вас есть файл паркета под "v3io://проекты/риск/FeatureStore/ptp/parquet/sets/ptp/1681296898546_70/"
У вас могут быть файлы паркета с другой схемой по указанному вами пути. пытаются читать, например
/path/
partition=value1/
part-000...snappy.parquet
partition=value2/
part-000...snappy.parquet
Если 2 паркета не имеют одинаковой схемы, вы получите эту ошибку.
По пути "v3io://projects/risk/FeatureStore/ptp/parquet/" для во всех подкаталогах у вас могут быть файлы, отличные от файлов паркета.
Несмотря на то, что проблема может быть указана выше, это может быть другая проблема, потому что недостаточно информации о файлах в разделе «v3io://projects/risk/FeatureStore/ptp/parquet/», я предлагаю вам добавить в свой пост весь дерево по этому пути вместе со схемой для всех файлов паркета.
Обновлять
Присмотревшись к твоему пути, я вижу проблему, этот путь
sets/ptp/1681296898546_70
Должно быть так
Patition1=sets/Patition2=ptp/Patition3=1681296898546_70
В spark вы либо указываете непосредственно на свой паркет, либо на каталог раздела, вы не можете указать путь, который не содержит ни паркета, ни раздела.
Во всем каталоге и подкаталогах есть только один паркетный файл (с корректным содержимым) (странная ситуация).
Эта часть кода (с recursiveFileLookup=true
) также помогает решить проблему:
new_DF=spark.read.option("recursiveFileLookup","true").parquet("v3io://projects/risk/FeatureStore/ptp/parquet/")
new_DF.show()
кажется, что не все файлы паркета в v3io://projects/risk/FeatureStore/ptp/parquet/ имеют одинаковую схему