【问题标题】:How to get csv on s3 with pyspark (No FileSystem for scheme: s3n)如何使用 pyspark 在 s3 上获取 csv(方案没有文件系统:s3n)
【发布时间】:2019-06-18 20:58:03
【问题描述】:

关于 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都无济于事。

我一直在互联网上转来转去,但似乎无法解决方案错误。谢谢!

【问题讨论】:

  • 你试过lines = sc.textFile("s3://mybucket-sparkexample/sparkexamplefile.csv")吗?
  • @RamdevSharma 是的也试过了,但是谢谢。我会更新我的帖子。

标签: python apache-spark pyspark


【解决方案1】:

我认为您的 spark 环境没有得到 aws jars。您需要添加它以使用 s3 或 s3n。

您必须将所需的 jar 文件从 hadoop 下载复制到 $SPARK_HOME/jars 目录。对 spark-submit 使用 --jars 标志或 --packages 标志不起作用。

我的 spark 版本是 Spark 2.3.0Hadoop 2.7.6 所以你必须从(hadoop dir)/share/hadoop/tools/lib/复制到罐子里 到$SPARK_HOME/jars

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

【讨论】:

  • 我最终下载了 Hadoop 并弄清楚如何配置和运行它。我还找到了你提到的文件。但找不到 Spark 的 jars 文件夹。我使用 anaconda 安装了 pyspark。我应该做点别的吗...?谢谢!
  • 检查 Spark_home 路径。 jar 文件夹在该路径中可用。
  • 我查过了,但我想我一定是安装 spark 错误,因为它似乎不存在 $SPARK_HOME 路径,所以我找不到 jar 文件夹。
  • 你是如何安装 Spark 的? spark有没有环境文件?因为没有那个火花是行不通的。可能是你为火花添加了一些额外的罐子???
【解决方案2】:

您必须检查您的 hadoop* 版本。 jar 文件绑定到系统上安装的特定 pyspark 版本,搜索文件夹 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...

【讨论】:

    猜你喜欢
    • 2020-05-13
    • 2018-03-26
    • 1970-01-01
    • 2021-12-12
    • 2021-11-15
    • 1970-01-01
    • 2018-08-20
    • 2019-08-30
    • 1970-01-01
    相关资源
    最近更新 更多