我有一个奇怪的问题,我认为可能是火花和/或熊猫的错误,但我不确定是否可能是我的用户错误。它与this bug的类似与this resolved issue相关,但它并不完全相同。
长话短说,我有一个包含四列的pyspark数据帧,其中第四列是一个非常长的字符串(实际上是一个键/值对的列表,我稍后将解压缩,但效率更高)将它们存储为该过程的这一部分的字符串)。当我df.print_schema()
时,我看到了这一点:
root
|-- attribute: string (nullable = true)
|-- id: long (nullable = true)
|-- label: long (nullable = true)
|-- featureString: string (nullable = true)
我的目标是将其写入一个表(默认情况下在我的群集上)作为镶木地板存储在s3中。然后我将在pd.read_parquet
的单独服务器上将每个镶木地板读到python中。
所以,当我跑:
df.select('attribute','id', 'label', 'featureString')\
.write.saveAsTable('db_name.table_name1', mode='overwrite')
然后我可以对s3中的各个文件执行pd.read_parquet()
,它运行正常。但是,我实际上希望每个文件都是attribute
列的给定值的所有行,所以我这样做:
df.select('attribute','id', 'label', 'featureString')\
.repartition('attribute')\
.write.saveAsTable('db_name.table_name2', mode='overwrite')
但是当我尝试使用pd.read_parquet
读取某些(但不是全部)文件时,我得到ArrowIOError: Invalid parquet file. Corrupt footer.
这是我链接的问题的确切错误上方。
它似乎也是无法读回的较大分区(约4 GB左右),这也与该问题相似(只有大文件)。但是,这个问题是关于回读用pd.to_parquet()
编写的文件并且我用pyspark write().saveAsTable()
命令写的。
无论如何,我对此感到沮丧。任何帮助将不胜感激。
PS-我在python 3.6中使用spark 2.3和pandas 0.23