pandas.read_parquet在分区的火花表

时间:2018-06-04 20:31:14

标签: python-3.x pandas apache-spark pyspark

我有一个奇怪的问题,我认为可能是火花和/或熊猫的错误​​,但我不确定是否可能是我的用户错误。它与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

0 个答案:

没有答案