#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>)