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

Я пытаюсь прочитать список каталогов каждый в свой собственный фрейм данных. Например.

dir_list = ['dir1', 'dir2', ...]
df1 = spark.read.csv(dir_list[0])
df2 = spark.read.csv(dir_list[1])
...

Каждый каталог содержит данные различных схем.

Я хочу сделать это параллельно, поэтому простой цикл for не сработает. Есть ли способ сделать это?

Пожалуйста, обратитесь к сообщению ниже. stackoverflow.com/questions/37257111/…

Tejeshwar Jayaprakash 10.01.2023 13:25

Но я хочу хранить данные в отдельных кадрах данных, поэтому выполнение spark.read.csv(*dir_list) не сработает (помещает их все в один df).

sancholp 10.01.2023 15:15

Что вы подразумеваете под "я хочу сделать это параллельно"? Можете ли вы уточнить, почему вы хотите, чтобы это было параллельно?

Abdennacer Lachiheb 10.01.2023 16:56
Типы данных JavaScript
Типы данных JavaScript
В JavaScript существует несколько типов данных, включая примитивные типы данных и ссылочные типы данных. Вот краткое объяснение различных типов данных...
Как сделать движок для футбольного матча? (простой вариант)
Как сделать движок для футбольного матча? (простой вариант)
Футбол. Для многих людей, живущих на земле, эта игра - больше, чем просто спорт. И эти люди всегда мечтают стать футболистом или менеджером. Но, к...
Знайте свои исключения!
Знайте свои исключения!
В Java исключение - это событие, возникающее во время выполнения программы, которое нарушает нормальный ход выполнения инструкций программы. Когда...
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик Модуль flexbox, также известный как гибкий модуль разметки box, помогает эффективно проектировать и...
Введение в раздел "Заголовок" в HTML
Введение в раздел "Заголовок" в HTML
Говорят, что лучшее о человеке можно увидеть только изнутри, и это относится и к веб-страницам HTML! Причина, по которой некоторые веб-страницы не...
1
3
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Да, есть :))

«Как» будет зависеть от того, какую обработку вы выполняете после чтения, потому что сам по себе spark.read.csv(...) не будет выполняться, пока вы не вызовете действие (из-за ленивых вычислений Spark), и помещение нескольких чтений в цикл for будет работать просто отлично.

Таким образом, если результаты оценки нескольких фреймов данных имеют одинаковую схему, параллелизм может быть просто достигнут путем их UNION-обработки. Например,

df1 = spark.read.csv(dir_list[0])
df2 = spark.read.csv(dir_list[1])
df1.withColumn("dfid",lit("df1")).groupBy("dfid").count()
   .union(df2.withColumn("dfid",lit("df1")).groupBy("dfid").count())
   .show(truncate=False)

... заставит dir_list[0] и dir_list[1] читаться параллельно.

Если это невозможно, то всегда есть маршрут Spark Scheduling:

Внутри данного приложения Spark (экземпляр SparkContext) несколько параллельные задания могут выполняться одновременно, если они были отправлены из отдельные нити. Под «работой» в этом разделе мы подразумеваем действие Spark. (например, сохранить, собрать) и любые задачи, которые необходимо выполнить для оценки этого действие.

Другие вопросы по теме