读者文摘:(Spark 2.x)
例如,如果您有 3 个目录保存 csv 文件:
目录1,目录2,目录3
然后您将 paths 定义为以逗号分隔的路径列表字符串,如下所示:
路径 = "dir1/,dir2/,dir3/*"
然后使用下面的函数并将这个paths变量传递给它
def get_df_from_csv_paths(paths):
df = spark.read.format("csv").option("header", "false").\
schema(custom_schema).\
option('delimiter', '\t').\
option('mode', 'DROPMALFORMED').\
load(paths.split(','))
return df
到那时运行:
df = get_df_from_csv_paths(paths)
您将在 df 中获得一个 spark 数据框,其中包含来自这 3 个目录中的所有 csv 的数据。
============================================== ================================
完整版:
如果您想提取多个目录中的多个 CSV,您只需传递一个列表并使用通配符。
例如:
如果你的 data_path 看起来像这样:
's3://bucket_name/subbucket_name/2016-09-*/184/*,
s3://bucket_name/subbucket_name/2016-10-*/184/*,
s3://bucket_name/subbucket_name/2016-11-*/184/*,
s3://bucket_name/subbucket_name/2016-12-*/184/*, ...'
您可以使用上述功能一次摄取所有这些目录和子目录中的所有 csv:
这将根据指定的通配符模式摄取 s3 bucket_name/subbucket_name/ 中的所有目录。例如第一个模式将在
中查找
bucket_name/subbucket_name/
对于名称以
开头的所有目录
2016-09-
对于其中的每一个,只取名为
的目录
184
并在该子目录中查找所有 csv 文件。
这将对逗号分隔列表中的每个模式执行。
这比联合好得多..