Reader's Digest: (Spark 2.x)
Например, если у вас есть 3 каталога с файлами csv:
dir1, dir2, dir3
Затем вы определяете пути как строку списка путей, разделенных запятыми, следующим образом:
пути = "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, содержащий данные из всех 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.
И это будет выполняться для каждого из шаблонов в списке, разделенном запятыми.
Это работает лучше, чем союз.
person
eiTan LaVi
schedule
07.03.2017