我有许多(相对较小的)具有不同架构的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个问题:
感谢您的想法和建议。