在 Pyspark 中读取 CSV 文件引发错误 FileNotFound 错误

Posted

技术标签:

【中文标题】在 Pyspark 中读取 CSV 文件引发错误 FileNotFound 错误【英文标题】:Read CSV file in Pyspark raises error FileNotFound Error 【发布时间】:2020-03-09 17:04:46 【问题描述】:

我在 Pyspark 和/或 Spark 中读取 CSV 文件时遇到问题。

我的目标是: 将某个目录下的所有 CSV 文件读入 Pandas 数据框。

我最熟悉 Python,包括 Pandas。因此,这是我的首选语言。文件比较小,计算应该没问题

由于隐私原因,我修改了一些文件和路径的名称 - 所以它们具有“奇怪”的名称。

我的第一步是导入 Pandas 用 CSV 文件检查文件夹的内容。

%pyhton
import pandas as pd
%sh
hdfs dfs -ls /dbm/ast-gbm/ntsf

结果:

找到 140 件商品

/dbm/ast-gbm/ntsf/ast1234.csv

找到的文件列表 - 为简洁起见此处省略

到目前为止一切顺利!

接下来我尝试使用 Python 读取一个示例 CSV 文件。问题从这里开始。

df = pd.read_csv("/dbm/ast-gbm/ntsf/ast1234.csv")

导致问题1:

[... - 为简洁起见,此处省略]

FileNotFoundError:[Errno 2] 文件 b'/dbm/ast-gbm/ntsf/ast1234.csv' 不存在:b'/dbm/ast-gbm/ntsf/ast1234.csv'

由于我能够使用 shell 列出所有文件,因此我不理解错误。

作为一种解决方法,我尝试将 CSV 文件加载到 spark 数据帧中并将其转换为 Pandas 数据帧。类似于以下*** post 的建议。

%spark.spark
spark.conf.set("spark.sql.execution.arrow.enabled", "true")

val ast_all = spark.read
    .format("csv")
    .option("sep", ";")
    .option("inferSchema", "true")
    .option("header", "true")
    .load("/dbm/ast-gbm/ntsf/*.csv")

ast_all.createOrReplaceTempView("ast_all")

df = ast_all.select("*").toPandas()

导致问题2:

console:40: error: value toPandas 不是 org.apache.spark.sql.DataFrame 的成员

df = ast_all.select("*").toPandas()

理想情况下,我会找到问题 1 或问题 2 的解决方案。或者,另一种将 140 个 csv 文件加载到 pandas 数据框中的方法也可以。

有什么想法吗?谢谢!

【问题讨论】:

【参考方案1】:

正在尝试修复problem 2

1 - 此语句错误:val ast_all = spark.read。该代码是Scala,而不是python。将其替换为ast_all = spark.read

2 - 您可以删除 ast_all.createOrReplaceTempView("ast_all")。不需要此语句。

3 - df = ast_all.select("*").toPandas() 需要导入 pandas,因此请在文件顶部添加 import pandas as pd

【讨论】:

好的,谢谢! 1和2 - 我已经做到了! 3 - Pandas 在 Pandas 语句上方导入。我的问题并不清楚 - 抱歉。我编辑了这个问题。不幸的是,错误没有改变

以上是关于在 Pyspark 中读取 CSV 文件引发错误 FileNotFound 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 pyspark 数据框中读取 csv 文件时读取选定的列?

在 pySpark (2.3) 中读取本地 csv 文件

如何在 pyspark 中启用 csv 文件的多行读取

apache zeppelin 使用 pyspark 读取 csv 失败

为啥有两个选项可以在 PySpark 中读取 CSV 文件?我应该使用哪一个?

从 pyspark 读取 csv 指定模式错误类型