我有正确的 parquet 文件(我是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()
奇怪的是,它工作正常,当我使用完整路径的Parquet文件:
new_DF=spark.read.parquet("v3io://projects/risk/FeatureStore/ptp/parquet/sets/ptp/1681296898546_70/")
new_DF.show()
你有类似的问题吗?
2条答案
按热度按时间cx6n0qe31#
发生错误的原因是 parquet 文件不在
"v3io://projects/risk/FeatureStore/ptp/parquet/"
文件夹中,而是在"v3io://projects/risk/FeatureStore/ptp/parquet/sets/ptp/1681296898546_70/"
文件夹中。这将工作:
*
语法读取目录中的所有内容。有关使用
spark.read
大量阅读文件的更多信息,请参阅此问题:Regex表示开始日期和结束日期之间的日期xqnpmsa82#
通常情况下,你在阅读一个parquet时不会看到这个错误,因为模式已经在parquet文件中了,根据我的经验,这里有一些你看到这个错误的原因:
1.您尝试读取的Parquet是空的,由于某些奇怪的原因,当Parquet是空的时,spark抛出此错误,但这似乎不是问题,因为您在“v3 io://projects/risk/FeatureStore/ptp/parquet/sets/ptp/1681296898546_70/”下有一个Parquet文件
1.例如,在您尝试读取的路径下可能有具有不同架构的 parquet 文件
如果两个parquets没有相同的模式,你会得到这个错误。
1.在所有子目录的路径“v3 io://projects/risk/FeatureStore/ptp/parquet/”下,您可能有非parquet文件。
尽管问题可以在上面列出,但它可能是另一个问题,因为没有关于“v3 io://projects/risk/FeatureStore/ptp/parquet/”下文件的足够信息,我建议您将该路径下的整个树沿着所有parquet文件的模式添加到您的帖子中。
更新
仔细观察你的路径,我看到了问题,这条路径
应该是这样的
在spark中,您可以直接指向您的parquet或分区目录,但不能指向既不是parquet内容也不是分区的路径。