Spark从不同的模式目录

时间:2017-09-26 13:57:55

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

我的spark程序必须从目录中读取,此目录包含不同模式的数据

  

DIR / subdir1 /文件
  1,10,外星人   1,11,鲍勃

     

DIR / subdir2 /文件
  2,蓝色,123,芝加哥
  2,红色,34岁,达拉斯

大约50个具有不同模式的目录。

我的火花作业必须从所有这些目录中读取数据并生成合并这些文件的文件,如下所示

  

1,10,外星人;
  1,11,鲍勃;
  2,蓝色,123,芝加哥;
  2,红色,34岁,达拉斯;

Spark数据框期望架构在所有目录中都相同。有什么方法我可以读取所有这些不同架构的文件,并使用spark

合并到单个文件中

1 个答案:

答案 0 :(得分:0)

使用镶木地板和不同的架构,我知道有两种策略

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

    spark.read.option("mergeSchema", "true").parquet("Dir/")
    
  2. 文档:https://spark.apache.org/docs/latest/sql-programming-guide.html#partition-discovery

    1. 如果列是不兼容的类型,则需要读取单个目录,然后需要将它们转换为带有

      的jsonRDD
      df.toJSON
      
    2. 然后联合所有jsonRDD

         df.toJSON.union(df2.toJSON)
      

      然后转换回实木复合地板

         spark.read.json(finalJsonRDD)