#python-3.x #dataframe #pyspark #apache-spark-sql
#python-3.x #фрейм данных #pyspark #apache-spark-sql
Вопрос:
Я пытаюсь прочитать csv-файл из s3 и создать фрейм данных, но не получаю результата. Не могли бы вы помочь мне, как это сделать? Ключ доступа и секретный ключ я здесь не ставлю. Я импортировал все библиотеки и создал искровое соединение.
Пример:
spark = SparkSession.builder.appName("CsvReader").getOrCreate()
spark._jsc.hadoopConfiguration().set("fs.s3a.access.key", 'access_key')
spark._jsc.hadoopConfiguration().set("fs.s3a.secret.key", "secret_key")
spark._jsc.hadoopConfiguration().set("fs.s3a.impl","org.apache.hadoop.fs.s3a.S3AFileSystem")
spark._jsc.hadoopConfiguration().set("com.amazonaws.services.s3.enableV4", "true")
spark._jsc.hadoopConfiguration().set("fs.s3a.aws.credentials.provider","org.apache.hadoop.fs.s3a.BasicAWSCredentialsProvider")
spark._jsc.hadoopConfiguration().set("fs.s3a.endpoint", "eu-west-3.amazonaws.com")
df = spark.read.format('csv').options(header='true', inferSchema='true').load('s3a://itx-acm-medaff-dev-sourcefiles/hta/Inbound/RawLayer/non_onco_cell_gene/non_onco_cell_gene_20201119.csv')
Ошибка:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/spark-2.0.0-bin-hadoop2.7/python/pyspark/sql/readwriter.py", line 147, in load
return self._df(self._jreader.load(path))
File "/usr/local/spark-2.0.0-bin-hadoop2.7/python/lib/py4j-0.10.1-src.zip/py4j/java_gateway.py", line 933, in __call__
File "/usr/local/spark-2.0.0-bin-hadoop2.7/python/pyspark/sql/utils.py", line 63, in deco
return f(*a, **kw)
File "/usr/local/spark-2.0.0-bin-hadoop2.7/python/lib/py4j-0.10.1-src.zip/py4j/protocol.py", line 312, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o232.load.
: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3a.S3AFileSystem not found
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2195)
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2638)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2651)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:92)
at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2687)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2669)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:371)
at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295)
at org.apache.spark.sql.execution.datasources.DataSource$anonfun$12.apply(DataSource.scala:352)
at org.apache.spark.sql.execution.datasources.DataSource$anonfun$12.apply(DataSource.scala:350)
at scala.collection.TraversableLike$anonfun$flatMap$1.apply(TraversableLike.scala:241)
at scala.collection.TraversableLike$anonfun$flatMap$1.apply(TraversableLike.scala:241)
at scala.collection.immutable.List.foreach(List.scala:381)
at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:241)
at scala.collection.immutable.List.flatMap(List.scala:344)
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:350)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:149)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:132)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:237)
at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
at py4j.Gateway.invoke(Gateway.java:280)
at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:128)
at py4j.commands.CallCommand.execute(CallCommand.java:79)
at py4j.GatewayConnection.run(GatewayConnection.java:211)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3a.S3AFileSystem not found
at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2101)
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2193)
... 28 more
Ответ №1:
Привет, кажется, вам не хватает jar, если вы используете команду spark-submit, убедитесь, что она доступна для всех узлов в одном и том же месте (это может быть hdfs / s3 / локальная файловая система), если вы используете оболочку pyspark, попробуйте скопировать и вставить jar в sparkпапка jars (если вы используете anaconda pyspark), эта папка будет находиться внутри ~Anaconda3 Lib site-packagespyspark jars
https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-aws/2.7.3
Надеюсь, это поможет и решит вашу проблему. PS при загрузке jar убедитесь, что он соответствует версии hadoop, которая у вас есть