python - Pyspark:如何从不同的文件夹中读取多个 csv?
问题描述
我有两个文件夹A
和B
A
包含file1.csv.gz
和包含和file2.csv.gz
_B
file2.csv.gz
file3.csv.gz
我想在一个独特的数据框中读取这些文件。
这就是我正在做的:
folders_to_read = ["A/*.csv.gz", "B/*.csv.gz"]
df = spark.read.format('csv').option("header", "true").option("inferSchema", "true").\
option("mode","DROPMALFORMED").load(i for i in folders_to_read)
但我得到一个错误。
Py4JJavaError: An error occurred while calling o200.load.
: java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String
解决方案
似乎传递给 pyspark 的路径需要是一个字符串。pyspark 接受字符串列表会很好,但它似乎没有这样做。您可以通过使用正则表达式来解决它。它似乎在我的本地机器上工作。
文件夹结构:
$ cd /Users/username/Downloads/tmp
$ tree
.
├── A
│ └── a.csv.gz
└── B
└── b.csv.gz
代码:
x = spark.read.csv('/Users/username/Downloads/tmp/[AB]/*.csv.gz')
print(x)
DataFrame[_c0: string, _c1: string, _c2: string]
有关正则表达式的更多详细信息,请参阅此内容: 如何使用正则表达式在 sc.textFile 中包含/排除一些输入文件?
推荐阅读
- c - 使用 C 以并行方式读取二维数组
- python - AttributeError:“成员”对象没有属性“public_flags”
- python - 使用“键盘”在失焦时打开新窗口
- javascript - 在哪里定义数据表以及如何添加/更新行/单元格值?
- c++ - 说 C++ 标准中语法选项的表示中没有隐含的顺序是否正确?
- javascript - 如何显示存储在 javascript 对象中的格式化 html 代码
- python-3.x - 有没有办法用 TypeError 异常缩短这个 json 代码?
- windows - 如果您在 C:/ 驱动器中运行 findstr 命令,它会执行多深?
- python - 我应该如何调查 Python 脚本在各种机器中的奇怪行为?
- angular - ngif 组件很快显示然后消失