繁体   English   中英

如何使用pyspark在s3上获取csv(方案的无文件系统:s3n)

[英]How to get csv on s3 with pyspark (No FileSystem for scheme: s3n)

关于SO有很多类似的问题,但是我根本无法解决这个问题。 我显然缺少了一些东西。

尝试从我的s3加载一个简单的测试CSV文件。

可以像下面这样在本地进行操作。

from pyspark.sql import SparkSession
from pyspark import SparkContext as sc

logFile = "sparkexamplefile.csv"
spark = SparkSession.builder.appName("SimpleApp").getOrCreate()

logData = spark.read.text(logFile).cache()

numAs = logData.filter(logData.value.contains('a')).count()
numBs = logData.filter(logData.value.contains('b')).count()

print("Lines with a: %i, lines with b: %i" % (numAs, numBs))

但是,如果我在下面添加:

sc._jsc.hadoopConfiguration().set("fs.s3n.awsAccessKeyId", "foo")
sc._jsc.hadoopConfiguration().set("fs.s3n.awsSecretAccessKey", "bar")
lines = sc.textFile("s3n:///mybucket-sparkexample/sparkexamplefile.csv")
lines.count()

我得到:

No FileSystem for scheme: s3n

我也尝试过将s3更改为spark.sparkContext

还要在URL中交换/////

更好的是,我宁愿这样做,直接进入数据框:

dataFrame = spark.read.csv("s3n:///mybucket-sparkexample/sparkexamplefile.csv")

另外,我对AWS一点也不了解,因此我尝试了s3,s3n和s3a无济于事。

我曾经在互联网上回过头来,但似乎无法解决方案错误。 谢谢!

我认为您的火花环境没有aws jars。 您需要添加它才能使用s3或s3n。

您必须从hadoop下载中将所需的jar文件复制到$ SPARK_HOME / jars目录中。 使用--jars标志或--packages标志进行spark-submit无效。

这里我的Spark 2.3.0版本是Spark 2.3.0Hadoop 2.7.6因此您必须从(hadoop dir)/share/hadoop/tools/lib/复制到jars到$SPARK_HOME/jars

aws-java-sdk-1.7.4.jar
hadoop-aws-2.7.6.jar

您必须检查您的hadoop *版本是什么。 绑定到系统上安装的特定版本pyspark的jar文件,搜索pyspark / jars文件夹和文件hadoop *。

观察到的版本是您像这样传递到pyspark文件中的:

os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages com.amazonaws:aws-java-sdk-pom:1.11.538,org.apache.hadoop:hadoop-aws:2.7.3 pyspark-shell'

对于pyspark上的新加入者来说,这有点棘手(我在pyspark的第一天就直接面对了这一点:-)。

否则,我将使用带有本地Spark 2.4.2的Gentoo系统。 一些建议安装Hadoop并将jar直接复制到Spark,但仍应与PySpark使用的版本相同。 因此,我正在为这些版本的Gentoo创建ebuild ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM