Моя структура каталогов:
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()
будут соответствовать номерам строк только что загруженных файлов.
Есть предложения? Я подозреваю, что это поддерживается в некотором роде / форме / форме на основе моего чтения внутренних структур файла паркета.