apache-spark - Pyspark - 加载文件 : Path does not exist

标签 apache-spark pyspark emr amazon-emr pyspark-sql

我是 Spark 的新手。我正在尝试读取 EMR 集群中的本地 csv 文件。该文件位于:/home/hadoop/。我正在使用的脚本是这样的:

spark = SparkSession \
    .builder \
    .appName("Protob Conversion to Parquet") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()\

df = spark.read.csv('/home/hadoop/observations_temp.csv, header=True)

当我运行脚本时,会出现以下错误消息:

pyspark.sql.utils.AnalysisException: u'Path does not exist: hdfs://ip-172-31-39-54.eu-west-1.compute.internal:8020/home/hadoop/observations_temp.csv



然后,我发现我必须在文件路径中添加 file://以便它可以在本地读取文件:
df = spark.read.csv('file:///home/hadoop/observations_temp.csv, header=True)

但这一次,上述方法引发了不同的错误:

Lost task 0.3 in stage 0.0 (TID 3,
ip-172-31-41-81.eu-west-1.compute.internal, executor 1): java.io.FileNotFoundException: File file:/home/hadoop/observations_temp.csv does not exist



我认为是因为 file//扩展名只是在本地读取文件,而不会在其他节点之间分发文件。

您知道如何读取 csv 文件并使其可供所有其他节点使用吗?

最佳答案

您的工作节点中缺少您的文件的事实是正确的,因此会引发您遇到的错误。
这里是官方文档Ref. External Datasets .

If using a path on the local filesystem, the file must also be accessible at the same path on worker nodes. Either copy the file to all workers or use a network-mounted shared file system.


所以基本上你有两个解决方案:
在开始工作之前,您将文件复制到每个 worker ;
或者您将使用以下内容在 HDFS 中上传:(推荐解决方案)
hadoop fs -put localfile /user/hadoop/hadoopfile.csv
现在你可以阅读它:
df = spark.read.csv('/user/hadoop/hadoopfile.csv', header=True)
您似乎也在使用 AWS S3。您始终可以尝试直接从 S3 读取它,而无需下载它。 (当然有适当的凭据)
有人建议使用 spark-submit 提供的 --files 标签将文件上传到执行目录。我不推荐这种方法,除非您的 csv 文件非常小,但您不需要 Spark。
或者,我会坚持使用 HDFS(或任何分布式文件系统)。

关于apache-spark - Pyspark - 加载文件 : Path does not exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42091575/

相关文章:

python - Apache PySpark 丢失执行程序 - 无法创建本地目录

java - 计算余弦相似度spark java

apache-spark - 从 PySpark 中的列加载 XML 字符串

java - 字符串索引超出范围 : -1 error

amazon-web-services - 如何在 EMR 集群中运行/安装 oozie

amazon-web-services - 配置EMR集群,选择哪个节点?

apache-spark - 使用 Spark Structured Streaming 从多个 Kafka 主题读取并写入不同接收器的最佳方法是什么?

python-3.x - 在 Azure Pyspark 中使用我自己的 python 模块,该模块读取并准备数据

sql-server - Azure Synapse pyspark 将外部表的 STRING 数据类型转换为 varchar(8000)

amazon-web-services - AWS EMR Impala 守护程序问题