Spark: чтение нескольких файлов AVRO с различными схемами параллельно - PullRequest
0 голосов
/ 25 октября 2018

У меня есть много (относительно небольших) файлов AVRO с разными схемами, каждый в одном месте, например:

Object Name: A
/path/to/A
   A_1.avro
   A_2.avro
   ...
   A_N.avro

Object Name: B
/path/to/B
   B_1.avro
   B_2.avro
   ...
   B_N.avro

Object Name: C
/path/to/C
   C_1.avro
   C_2.avro
   ...
   C_N.avro
...

, и моя цель - прочитать их параллельно через Spark и сохранить каждую строку в виде большого двоичного объектав одном столбце вывода.В результате мои выходные данные будут иметь согласованную схему, что-то вроде следующих столбцов: ID, objectName, RecordDate, Data, где поле «Данные» содержит строку JSON исходной записи.

Моя первоначальная мысль былачтобы поместить операторы read read в цикл, создайте поля, показанные выше для каждого фрейма данных, а затем примените операцию объединения для получения моего окончательного фрейма данных, например:

all_df = []
for obj_name in all_object_names:
    file_path = get_file_path(object_name)
    df = spark.read.format(DATABRIKS_FORMAT).load(file_path)
    all_df.append(df)

df_o = all_df.drop()
for df in all_df:
    df_o = df_o.union(df)

# write df_o to the output

Однако я не уверен, еслиоперации чтения будут распараллелены.

Я также натолкнулся на функцию sc.textFile (), чтобы прочитать все файлы AVRO за один раз как строку, но не смог заставить ее работать.

Итак, у меня есть 2 вопроса:

  1. Будет ли несколько операторов чтения в цикле распараллеливаться Spark?Или есть более эффективный способ добиться этого?
  2. Можно ли использовать sc.textFile () для чтения файлов AVRO в виде строки JSON в одном столбце?

Я быценим ваши мысли и предложения.

...