【发布时间】: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 数据帧。类似于以下stackoverflow 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 数据框中的方法也可以。
有什么想法吗?谢谢!
【问题讨论】:
标签: python pandas csv apache-spark pyspark