Чтение в фрейме данных Spark из нескольких файлов

#python #apache-spark #pyspark

Вопрос:

Предположим, у вас есть два блока s3, из которых вы хотите прочитать фрейм данных spark. Для одного файла чтение во фрейме данных spark будет выглядеть следующим образом:

 file_1 = ("s3://loc1/")
df = spark.read.option("MergeSchema","True").load(file_1) 
 

Если у нас есть два файла:

  file_1 = ("s3://loc1/")
 file_2 = ("s3://loc2/")
 

как бы мы читали в фрейме данных spark? Есть ли способ объединить эти два расположения файлов?

Комментарии:

1. Вы можете объединить оба фрейма данных, если обе структуры одинаковы, используя функцию UnionAll или Union, например df_file1.union(df_file2).

Ответ №1:

Как указано в предыдущем комментарии, вы можете прочитать в каждом по отдельности, а затем выполнить функцию объединения.

Другим вариантом может быть попробовать API Spark RDD, а затем преобразовать его в фрейм данных. Так, например:

 sc = spark.sparkContext

raw_data_RDD = sc.textfile(<dir1> , <dir2>, ...)
 

Для вложенных каталогов можно использовать подстановочный знак (*). Теперь вам нужно подумать о том, равны ли ваши схемы для обоих местоположений. Возможно, вам придется выполнить некоторую предварительную обработку перед преобразованием в фрейм данных. Как только ваша схема настроена, вы можете просто сделать:

 raw_df = spark.createDataFrame(raw_data_RDD, schema=<schema>)