java.io.IOException : Could not read footer for file FileStatus when trying to read parquet file from Spark cluster from IBM Cloud Object Storage

标签 java python apache-spark jupyter jupyterhub

我在 Kubernetes 上创建了一个包含 3 个工作线程的 Spark 集群,并附加了一个 JupyterHub 部署,以便我可以运行大量查询。

我的 parquet 文件存储在 IBM Cloud Object Storage (COS) 中,当我运行简单代码从 COS 读取时,出现以下错误:

Could not read footer: java.io.IOException: Could not read footer for file FileStatus{path=file:/path/myfile.parquet/_common_metadata; isDirectory=false; length=413; replication=0; blocksize=0; modification_time=0; access_time=0; owner=; group=; permission=rw-rw-rw-; isSymlink=false} at parquet.hadoop.ParquetFileReader.readAllFootersInParallel

我已将所有必需的库添加到驱动程序中 SPARK_HOME 目录的 /jars 目录中。

这是我用来连接的代码:

# Initial Setup - Once
import os

from pyspark import SparkConf, SparkContext
from pyspark.sql import SparkSession

spark_session = SparkSession(sc)


credentials_staging_parquet = {
  'bucket_dm':'mybucket1',
  'bucket_eid':'bucket2',
  'secret_key':'XXXXXXXX',
  'iam_url':'https://iam.ng.bluemix.net/oidc/token',
  'api_key':'XXXXXXXX',
  'resource_instance_id':'crn:v1:bluemix:public:cloud-object-storage:global:a/XXXXX:XXXXX::',
  'access_key':'XXXXX',
  'url':'https://s3-api.us-geo.objectstorage.softlayer.net'
}

conf = {
    'fs.cos.service.access.key': credentials_staging_parquet.get('access_key'),
    'fs.cos.service.endpoint': credentials_staging_parquet.get('url'),
    'fs.cos.service.secret.key': credentials_staging_parquet.get('secret_key'),
    'fs.cos.service.iam.endpoint': credentials_staging_parquet.get('iam_url'),
    'fs.cos.service.iam.service.id': credentials_staging_parquet.get('resource_instance_id'),
    'fs.stocator.scheme.list': 'cos',
    'fs.cos.impl': 'com.ibm.stocator.fs.ObjectStoreFileSystem',
    'fs.stocator.cos.impl': 'com.ibm.stocator.fs.cos.COSAPIClient',
    'fs.stocator.cos.scheme': 'cos',
    'fs.cos.client.execution.timeout': '18000000',
    'fs.stocator.glob.bracket.support': 'true'
}

hadoop_conf = sc._jsc.hadoopConfiguration()
for key in conf:
    hadoop_conf.set(key, conf.get(key))

parquet_path = 'store/MY_FILE/*'
cos_url = 'cos://{bucket}.service/{parquet_path}'.format(bucket=credentials_staging_parquet.get('bucket_eid'), parquet_path=parquet_path)

df2 = spark_session.read.parquet(cos_url)

最佳答案

我遇到了类似的错误,并通过 Google 搜索找到了这篇文章。接下来,我意识到我有一个文件格式问题,保存的文件是 Avro,文件读取器是 Orc。所以...检查您保存的文件格式和阅读器格式是否一致。

关于java.io.IOException : Could not read footer for file FileStatus when trying to read parquet file from Spark cluster from IBM Cloud Object Storage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54735499/

相关文章:

python - Flask-HTTPAuth verify_password 函数未收到用户名或密码

python - unionAll 导致 StackOverflow

python - Apache Spark : Can't use Matplotlib on Jupyter Notebook

java - Apache Spark 在 Dataframe 中找到第一个不同的前一行

Java - 高级模式对话框

java - 尝试使 JTable 中的链接可单击时出现未处理的异常类型 URISyntaxException

java - 如何拆分字符串并输出拆分的一部分?

python - 通过磁条索引输入信用卡

python - 如何在python中深度复制队列

java - 使用 Controller、Service 和 Repository 注释的最佳实践是什么?