我有5个表存储为CSV文件(A.csv,B.csv,C.csv,D.csv,E.csv)。每个文件按日期分区。如果我的文件夹结构为:
A/ds=2017-07-01/A.csv
A/ds=2017-07-02/A.csv
...
E/ds=2017-07-02/E.csv
然后使用以下命令将自动识别Spark 2.x
中表A的分区data_facts = spark.read\
.option('inferSchema', 'true')\
.option('header', 'true')\
.csv('/FileStore/A/')
我的问题是,如果我的文件夹结构是这样的,我是否仍然可以保持相同的功能:
Data/ds=2017-07-01/A.csv
Data/ds=2017-07-01/B.csv
Data/ds=2017-07-01/C.csv
Data/ds=2017-07-01/D.csv
Data/ds=2017-07-01/E.csv
Data/ds=2017-07-02/A.csv
Data/ds=2017-07-02/B.csv
Data/ds=2017-07-02/C.csv
Data/ds=2017-07-02/D.csv
Data/ds=2017-07-02/E.csv
在这种情况下,是否有办法在参数中读取表A?或者我最好将数据移动到每个表的单个文件夹中?
答案 0 :(得分:1)
将表放在顶部(A,B,C等),然后ds分区,最后是底部的原始[相同模式!] CSV文件是正确的方法。
你提出的第二种风格需要丑陋的黑客来使分区可用并确保表只有其相关数据而没有来自其他表的交叉污染模式。