Spark 从不同的模式目录读取数据帧
Posted
技术标签:
【中文标题】Spark 从不同的模式目录读取数据帧【英文标题】:Spark Reading data frames from different schema directory 【发布时间】:2017-09-26 13:57:55 【问题描述】:我的 spark 程序必须从一个目录中读取,这个目录有不同模式的数据
目录/subdir1/文件 1,10,外星人 1,11,鲍勃
目录/subdir2/文件 2,蓝色,123,芝加哥 2,red, 34, 达拉斯
大约 50 个不同架构的目录。
我的 spark 作业必须从所有这些目录中读取数据并生成一个合并这些文件的文件,如下所示
1、10、外星人; 1, 11, 鲍勃; 2、蓝色、123、芝加哥; 2、red、34、达拉斯;
Spark 数据框要求所有目录中的架构都相同。有什么方法可以读取所有这些不同架构的文件并使用 spark 合并到单个文件中
【问题讨论】:
数据的格式是什么?如果是 parquet,您可以使用 spark parquet 模式合并。 它们是镶木地板文件。但是所有文件都有不同的架构。 【参考方案1】:对于镶木地板和不同的架构,我知道有 2 种策略
如果架构兼容,您可以使用 mergeSchema
spark.read.option("mergeSchema", "true").parquet("Dir/")
文档:https://spark.apache.org/docs/latest/sql-programming-guide.html#partition-discovery
如果列是不兼容的类型,您需要读取单个目录,那么您需要将它们转换为 jsonRDD
df.toJSON
然后联合所有的jsonRDD
df.toJSON.union(df2.toJSON)
然后转换回镶木地板
spark.read.json(finalJsonRDD)
【讨论】:
以上是关于Spark 从不同的模式目录读取数据帧的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 spark.read.jdbc 读取不同 Pyspark 数据帧中的多个文件
如何从 BigQuery 读取分区表到 Spark 数据帧(在 PySpark 中)