【问题标题】:Spark Reading data frames from different schema directorySpark 从不同的模式目录读取数据帧
【发布时间】: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 模式合并。
  • 它们是镶木地板文件。但是所有文件都有不同的架构。

标签: apache-spark pyspark spark-dataframe pyspark-sql


【解决方案1】:

对于镶木地板和不同的架构,我知道有 2 种策略

  1. 如果架构兼容,您可以使用 mergeSchema

    spark.read.option("mergeSchema", "true").parquet("Dir/")
    

文档:https://spark.apache.org/docs/latest/sql-programming-guide.html#partition-discovery

  1. 如果列是不兼容的类型,您需要读取单个目录,那么您需要将它们转换为 jsonRDD

    df.toJSON
    

然后联合所有的jsonRDD

   df.toJSON.union(df2.toJSON)

然后转换回镶木地板

   spark.read.json(finalJsonRDD)

【讨论】:

    猜你喜欢
    • 2020-08-27
    • 2021-04-26
    • 2017-06-23
    • 2018-11-14
    • 2017-01-16
    • 2017-03-01
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多