我的Spark程序必须从目录中读取,该目录具有不同的模式的数据
dir/subdir1/files
1,10,外星人
1,11,鲍勃dir/subdir2/files
2,蓝色,123,芝加哥
2,红色,34,达拉斯
大约有50个带有不同模式的目录。
我的Spark Job必须读取所有这些目录的数据并生成一个合并此文件的文件,如下所示
1,10,外星人;
1、11,鲍勃;
2,蓝色,123,芝加哥;
2,红色,34,达拉斯;
火花数据框架期望在所有目录中架构相同。有什么方法我可以读取不同模式的所有这些文件,并使用Spark
带有parquet和不同的模式,我知道有2种策略
如果模式兼容,则可以使用MergesChema
spark.read.option("mergeSchema", "true").parquet("Dir/")
文档:https://spark.apache.org/docs/latest/sql-programming-guide.html#partition-discovery
如果列是不兼容的类型,则需要读取单个目录,则需要使用
将它们转换为JSONRDDdf.toJSON
,然后结合所有jsonrdd
df.toJSON.union(df2.toJSON)
随后转换回木材
spark.read.json(finalJsonRDD)