我已经看了几个类似的问题-here,here和其他一些博客文章和堆栈溢出问题。
我有下面的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安装也没有这些文件
先谢谢你!
1条答案
按热度按时间fwzugrvs1#
错误消息
No FileSystem for scheme: gs
表明Spark不理解您的bucket路径(gs://),并且找不到GCS连接器,因此您必须先挂载bucket。我建议您查看文档,确保您的设置应用正确,Cloud Storage connector您还可以执行以下操作:
from google.colab import auth auth.authenticate_user()
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