python-3.x - pandas.read_parquet 在分区 spark 表上抛出 ArrowIOError
问题描述
我遇到了一个奇怪的问题,我认为这可能是 spark 和/或 pandas 中的错误,但我不确定这是否可能是我的用户错误。它类似于与此已解决问题相关的此错误,但并不完全相同。
长话短说,我有一个包含四列的 pyspark 数据框,其中第四列是一个很长的字符串(实际上是一个键/值对列表,我稍后将对其进行解包,但将它们存储为字符串更有效这部分过程)。当我这样做时,df.print_schema()
我会看到:
root
|-- attribute: string (nullable = true)
|-- id: long (nullable = true)
|-- label: long (nullable = true)
|-- featureString: string (nullable = true)
我的目标是将其写入一个表(默认情况下在我的集群上)作为镶木地板存储在 s3 中。然后,我稍后将在单独的服务器上将每个单独的镶木地板读入 python pd.read_parquet
。
所以,当我运行时:
df.select('attribute','id', 'label', 'featureString')\
.write.saveAsTable('db_name.table_name1', mode='overwrite')
然后我可以pd.read_parquet()
对 s3 中的单个文件进行操作,并且效果很好。但是,我实际上希望每个文件都是列的给定值的所有行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()
pysparkwrite().saveAsTable()
命令写入的文件。
无论如何,我对此感到困惑。任何帮助将非常感激。
PS-我在 python 3.6 中使用 spark 2.3 和 pandas 0.23
解决方案
推荐阅读
- java - 将 gridfs 文件信息存储在自定义表中
- javascript - 在 javascript 中使用 jpg、jpeg、png、webp 填充数组图像链接
- javascript - 如何在一个组件上的一个组件上设置背景不可见
- sql - oracle中获取父表和列值
- azure - Azure VM:监控单个磁盘可用空间
- powerbi - DAX Measure 从最旧的发票中减去价值
- javascript - HTML 语义 - 充当锚点的按钮
- python - 如何计算一维 CNN 的 FLOP 和参数数量?使用pytorch平台
- angular - 我无法从 promise 对象的下拉列表中获取数据,它在控制台响应中显示数据。角度承诺
- xcode - 无法在 XCode 中使用 Cocoapods 归档 Kotlin Native