如何读取条件为数据框的分区镶木地板,
这很好用,
val dataframe = sqlContext.read.parquet("file:///home/msoproj/dev_data/dev_output/aln/partitions/data=jDD/year=2015/month=10/day=25/*")
day=1 to day=30
的分区可以读取(day = 5 to 6)
或day=5,day=6
,
val dataframe = sqlContext.read.parquet("file:///home/msoproj/dev_data/dev_output/aln/partitions/data=jDD/year=2015/month=10/day=??/*")
如果我放*
它会给我30天的全部数据而且数据太大了。
答案 0 :(得分:52)
sqlContext.read.parquet
可以将多个路径作为输入。如果您只需要day=5
和day=6
,则只需添加两条路径,例如:
val dataframe = sqlContext
.read.parquet("file:///your/path/data=jDD/year=2015/month=10/day=5/",
"file:///your/path/data=jDD/year=2015/month=10/day=6/")
如果您有day=X
下的文件夹,例如country=XX
,country
将自动添加为dataframe
中的列。
编辑:从Spark 1.6开始,需要提供一个" basepath" -option,以便Spark自动生成列。在Spark 1.6.x中,上面的内容必须像这样重写,以创建一个数据框,其中包含列"数据","年","月"和" day":
val dataframe = sqlContext
.read
.option("basePath", "file:///your/path/")
.parquet("file:///your/path/data=jDD/year=2015/month=10/day=5/",
"file:///your/path/data=jDD/year=2015/month=10/day=6/")
答案 1 :(得分:11)
如果您想要阅读多天,例如day = 5
和day = 6
,并想在路径中提及范围,可以使用通配符:
val dataframe = sqlContext
.read
.parquet("file:///your/path/data=jDD/year=2015/month=10/day={5,6}/*")
通配符也可用于指定天数范围:
val dataframe = sqlContext
.read
.parquet("file:///your/path/data=jDD/year=2015/month=10/day=[5-10]/*")
这匹配从5到10的所有日子。
答案 2 :(得分:5)
您需要提供mergeSchema = true
选项。如下所述(这是1.6.0):
val dataframe = sqlContext.read.option("mergeSchema", "true").parquet("file:///your/path/data=jDD")
这会将所有镶木地板文件读入数据框,并在数据框数据中创建年,月,日列。
参考:https://spark.apache.org/docs/1.6.0/sql-programming-guide.html#schema-merging