我试图理解我是否只能加载50%(或者先加载n
批次1中的文件数量和批次2)中的其余文件使用
spark.read.csv。
我无法使用正则表达式生成这些文件 来自多个来源,它们的数量不均匀(来自一些 他们很少来源,其他来源有很多)。如果我 考虑使用通配符或正则表达式处理不均匀批处理中的文件 我可能无法获得优化的表现。
有没有办法可以告诉spark.read.csv读取器选择前n个文件,然后我会提到加载最后的n-1个文件
我知道这可以通过编写另一个程序来完成。但我不喜欢,因为我有超过20000个文件,我不想迭代它们。
答案 0 :(得分:1)
如果您首先使用hadoop API列出文件然后根据此列表块创建数据帧,那么这很容易。例如:
path = '/path/to/files/'
from py4j.java_gateway import java_import
fs = spark._jvm.org.apache.hadoop.fs.FileSystem.get(spark._jsc.hadoopConfiguration())
list_status = fs.listStatus(spark._jvm.org.apache.hadoop.fs.Path(path))
paths = [file.getPath().toString() for file in list_status]
df1 = spark.read.csv(paths[:7500])
df2 = spark.read.csv(paths[7500:])