关于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版本是Spark 2.3.0
和Hadoop 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
关于python - 如何使用pyspark在s3上获取csv(方案的无文件系统:s3n),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54358250/