获取分区拼花数据框的最新模式

时间:2017-10-18 18:44:41

标签: apache-spark dataframe apache-spark-2.0

我们开始使用火花和镶木地板文件在hadoop集群中收集数据......但是我们很难保证镶木地板架构将来不会改变。我们试图找到读取parquets的最佳方法,即使架构发生变化......

我们要实施的规则是最新的镶木地板文件将作为我们的参考......

我们做了不同的测试,包括:

  • spark.read.parquet(“test”)。filter(“year = 2017 and month = 10 and day> = 15”)
  • spark.read.parquet(“test / year = 2017 / month = 10 / day = 17”,“test / year = 2017 / month = 10 / day = 16”,“test / year = 2017 / month = 10 /天= 15" )
    • //使用不同的顺序进行测试
  • spark.read.parquet( “测试/年= 2017 /月= 10 /天= {15,16,17}”)

等...

并且read方法保留的模式始终是最旧的模式(即10月15日的模式)。

有人知道如何获得最新的架构(即十月十七日)吗?

当然,spark.read.option(“mergeSchema”,“true”)不起作用,因为如果我们在最新的镶木地板中删除了一列,它就不会删除一列。我们在这里进行了3天的测试......但可能会在很大范围的分区上进行测试。

提前致谢

此致

1 个答案:

答案 0 :(得分:3)

我在pyspark写这篇文章。应适用于其他语言。

schema = spark.read.parquet("test/year=2017/month=10/day=17/").schema
df = spark.read.schema(schema).parquet("test/*/*/*/")