PySpark: загрузка нескольких файлов CSV, содержащих один столбец одного фрейма данных - PullRequest
0 голосов
/ 05 апреля 2020

Моя структура каталогов:

date/<date>/<files>.csv.gz

Пример:

date/20200101/temperature_readings_Oregon.csv.gz date/20200101/temperature_readings_California.csv.gz date/20200102/temperature_readings_Oregon.csv.gz date/20200102/temperature_readings_California.csv.gz

Каждый файл точно одинаковой длины.
Каждый файл содержит один столбец фрейма данных.
Каждый файл представляет собой один столбец с заголовком / комментарием.

По номеру строки показания температуры в строке 10 для Орегона соответствуют тому же времени чтения в строке 10 для Калифорнии.

Ни один из файлов не содержит идентификатора строки.

Цель:

Я хотел бы загрузить все / некоторые из этих файлов в один фрейм данных искры


dfs=collections.defaultdict(dict)
for var, date in itertools.product(variables_to_load_iter,dates):
    dfs[date][var]=sqlContext.read\
       .format("com.databricks.spark.csv")\
       .option("header", "true")\
       .option("inferSchema","true")\
       .option("comment","#")\
       .load("weatherdata/"+date+"/"+var+".gz")

Это делает загрузите все файлы быстро!

Как их сшить?
Можно ли избежать использования дорогого соединения?

Некоторые люди советуют, row_num() или monotonically_increasing_id(). Однако я не уверен, что row_num() или monotonically_increasing_id() будут соответствовать номерам строк только что загруженных файлов.

Есть предложения? Я подозреваю, что это поддерживается в некотором роде / форме / форме на основе моего чтения внутренних структур файла паркета.

...