在普通PySpark安装中,方案“gs”的Google存储连接器没有文件系统

lmvvr0a8  于 2023-01-29  发布在  Spark
关注(0)|答案(1)|浏览(135)

我已经看了几个类似的问题-herehere和其他一些博客文章和堆栈溢出问题。
我有下面的PySpark脚本,希望从GCS存储桶读取数据

from pyspark.sql import SparkSession

spark = SparkSession.builder\
    .appName("GCSFilesRead")\
    .getOrCreate()

bucket_name="my-gcs-bucket"
path=f"gs://{bucket_name}/path/to/file.csv"

df=spark.read.csv(path, header=True)
print(df.head())

它会失败,错误是-

py4j.protocol.Py4JJavaError: An error occurred while calling o29.csv.
: org.apache.hadoop.fs.UnsupportedFileSystemException: No FileSystem for scheme "gs"
        at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:3443)
        at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:3466)
        at org.apache.hadoop.fs.FileSystem.access$300(FileSystem.java:174)
        at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:3574)

我的环境设置Dockerfile如下所示:

FROM openjdk:11.0.11-jre-slim-buster

# install a whole bunch of apt-get dev essential libraries (unixodbc-dev, libgdbm-dev...)
# some other setup for other services
# copy my repository, requirements file
# install Python-3.9 and activate a venv

RUN pip install pyspark==3.3.1

没有像HADOOP_HOME,SPARK_HOME,PYSPARK_PYTHON等那样的环境变量,只是一个普通的PySpark安装。
我试过逃跑-

spark = SparkSession.builder\
    .appName("GCSFilesRead")\
    .config("spark.jars.package", "/path/to/jar/gcs-connector-hadoop3-2.2.10.jar") \
    .getOrCreate()

spark = SparkSession.builder\
    .appName("GCSFilesRead")\
    .config("fs.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem")\
    .config("fs.AbstractFileSystem.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS")\
    .getOrCreate()

和其他一些解决方案,但我仍然得到相同的错误
我的问题是-
1.* * 在这样的设置中,我需要执行哪些操作才能运行此脚本?*我已经看到了有关更新pom文件、core-site.xml文件等的答案,但似乎这些文件不附带简单的pyspark安装
1.
* 如何使jar installs/setup成为pyspark only安装中的默认spark设置?**我希望简单地运行此脚本-python path/to/file.py,而不使用spark-submit传递任何参数,在sparksession. config中设置它等。我知道,如果我们有常规的spark安装,我们可以将默认jar添加到spark-defaults. conf文件中,但是看起来普通的PySpark安装也没有这些文件
先谢谢你!

fwzugrvs

fwzugrvs1#

错误消息No FileSystem for scheme: gs表明Spark不理解您的bucket路径(gs://),并且找不到GCS连接器,因此您必须先挂载bucket。我建议您查看文档,确保您的设置应用正确,Cloud Storage connector
您还可以执行以下操作:

  • 验证您的用户〉

from google.colab import auth auth.authenticate_user()

  • 然后使用以下代码段安装gcsfuse〉

echo "deb http://packages.cloud.google.com/apt gcsfuse-bionic main" > /etc/apt/sources.list.d/gcsfuse.list !curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - !apt -qq update !apt -qq install gcsfuse

  • 然后按照以下步骤安装铲斗〉

mkdir mybucket !gcsfuse mybucket mybucket
您可以将数据存储到以下路径:
df.write.csv('/content/my_bucket/df')
我还建议您有一个详细工作流的look at this thread示例。
您也可以尝试以下操作一次:
要访问Google云存储,您必须包含云存储连接器:
spark-submit --jars /path/to/gcs/gcs-connector-latest-hadoop2.jar your-pyspark-script.py

pyspark --jars /path/to/gcs/gcs-connector-latest-hadoop2.jar

相关问题