Spark:并行读取具有不同架构的多个AVRO文件

时间:2018-10-25 16:44:53

标签: apache-spark hadoop parallel-processing avro

我有许多(相对较小的)具有不同架构的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并行读取它们,并将每一行作为blob存储在输出的一列中。结果,我的输出数据将具有一致的架构,类似于以下各列: ID,objectName,RecordDate,数据 “数据”字段包含原始记录的字符串JSON。

我最初的想法是将spark 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. 是否将循环中的多个读取语句并行化? 火花?还是有一种更有效的方法来实现这一目标?
  2. sc.textFile()可以用于在一列中以字符串JSON的形式读取AVRO文件吗?

感谢您的想法和建议。

0 个答案:

没有答案