Pyspark:只读入特定日期的 ORC 数据
Pyspark: Read in ORC data only for specific dates
我有 3 个数据文件存储在 ORC 中,按 DATE
分区。
/orc/orc_FLORIDA_2019-04-29/alloc_FLORIDA_2019-04-29/DATE=2019-04-29/myfile.snappy.orc
/orc/orc_FLORIDA_2019-04-29/avails_FLORIDA_2019-04-29/DATE=2019-04-29/myfile.snappy.orc
/orc/orc_FLORIDA_2019-04-29/orders_FLORIDA_2019-04-29/DATE=2019-04-29/myfile.snappy.orc
我提取了一周的数据,因此每组文件的下一个文件结构如下所示:
/orc/orc_FLORIDA_2019-04-30/alloc_FLORIDA_2019-04-30/DATE=2019-04-30/myfile.snappy.orc
/orc/orc_FLORIDA_2019-05-1/alloc_FLORIDA_2019-05-1/DATE=2019-05-1/myfile.snappy.orc
/orc/orc_FLORIDA_2019-05-2/alloc_FLORIDA_2019-05-2/DATE=2019-05-2/myfile.snappy.orc
等等...
我知道我可以使用以下命令读取一天的 ORC 文件:
alloc_orc = spark.read.orc("/orc/orc_FLORIDA_2019-04-30/alloc_FLORIDA_2019-04-30/")
avails_orc = spark.read.orc("/orc/orc_FLORIDA_2019-04-30/avails_FLORIDA_2019-04-30/")
orders_orc = spark.read.orc("/orc/orc_FLORIDA_2019-04-30/orders_FLORIDA_2019-04-30/")
我将如何阅读每个 table 的整周数据?
而且,如果我有一个月的数据,我只能在第一周阅读吗?或者我是否必须阅读整个月,然后过滤出我想要的日期?
我是否需要调整我的文件结构并将输出的数据保存到此以便于读取?
/orc/orc_FLORIDA/alloc/DATE=2019-04-29/myfile.snappy.orc
/orc/orc_FLORIDA/alloc/DATE=2019-04-30/myfile.snappy.orc
/orc/orc_FLORIDA/avails/DATE=2019-04-29/myfile.snappy.orc
/orc/orc_FLORIDA/avails/DATE=2019-04-30/myfile.snappy.orc
等等...
非常感谢任何帮助!
如果您将结构更改为 Date
那么 alloc/avails
将更容易 谓词下推过滤器.
/orc/orc_FLORIDA/DATE=2019-04-29/alloc/myfile.snappy.orc
/orc/orc_FLORIDA/DATE=2019-04-30/alloc/myfile.snappy.orc
/orc/orc_FLORIDA/DATE=2019-04-29/avails/myfile.snappy.orc
/orc/orc_FLORIDA/DATE=2019-04-30/avails/myfile.snappy.orc
#set predicate pushdown parameter
spark.sql("set spark.sql.orc.filterPushdown=true").show()
#read 1 week files and you can extract alloc,avails from file_name in case if you need to add them as column
spark.read.orc("/orc/orc_FLORIDA").\
filter((col("DATE") >= "strt_date") & (col("batchdate") < "end_date")).\
withColumn("file_name",input_file_name()).\
show(10,False)
我有 3 个数据文件存储在 ORC 中,按 DATE
分区。
/orc/orc_FLORIDA_2019-04-29/alloc_FLORIDA_2019-04-29/DATE=2019-04-29/myfile.snappy.orc
/orc/orc_FLORIDA_2019-04-29/avails_FLORIDA_2019-04-29/DATE=2019-04-29/myfile.snappy.orc
/orc/orc_FLORIDA_2019-04-29/orders_FLORIDA_2019-04-29/DATE=2019-04-29/myfile.snappy.orc
我提取了一周的数据,因此每组文件的下一个文件结构如下所示:
/orc/orc_FLORIDA_2019-04-30/alloc_FLORIDA_2019-04-30/DATE=2019-04-30/myfile.snappy.orc
/orc/orc_FLORIDA_2019-05-1/alloc_FLORIDA_2019-05-1/DATE=2019-05-1/myfile.snappy.orc
/orc/orc_FLORIDA_2019-05-2/alloc_FLORIDA_2019-05-2/DATE=2019-05-2/myfile.snappy.orc
等等...
我知道我可以使用以下命令读取一天的 ORC 文件:
alloc_orc = spark.read.orc("/orc/orc_FLORIDA_2019-04-30/alloc_FLORIDA_2019-04-30/")
avails_orc = spark.read.orc("/orc/orc_FLORIDA_2019-04-30/avails_FLORIDA_2019-04-30/")
orders_orc = spark.read.orc("/orc/orc_FLORIDA_2019-04-30/orders_FLORIDA_2019-04-30/")
我将如何阅读每个 table 的整周数据?
而且,如果我有一个月的数据,我只能在第一周阅读吗?或者我是否必须阅读整个月,然后过滤出我想要的日期?
我是否需要调整我的文件结构并将输出的数据保存到此以便于读取?
/orc/orc_FLORIDA/alloc/DATE=2019-04-29/myfile.snappy.orc
/orc/orc_FLORIDA/alloc/DATE=2019-04-30/myfile.snappy.orc
/orc/orc_FLORIDA/avails/DATE=2019-04-29/myfile.snappy.orc
/orc/orc_FLORIDA/avails/DATE=2019-04-30/myfile.snappy.orc
等等...
非常感谢任何帮助!
如果您将结构更改为 Date
那么 alloc/avails
将更容易 谓词下推过滤器.
/orc/orc_FLORIDA/DATE=2019-04-29/alloc/myfile.snappy.orc
/orc/orc_FLORIDA/DATE=2019-04-30/alloc/myfile.snappy.orc
/orc/orc_FLORIDA/DATE=2019-04-29/avails/myfile.snappy.orc
/orc/orc_FLORIDA/DATE=2019-04-30/avails/myfile.snappy.orc
#set predicate pushdown parameter
spark.sql("set spark.sql.orc.filterPushdown=true").show()
#read 1 week files and you can extract alloc,avails from file_name in case if you need to add them as column
spark.read.orc("/orc/orc_FLORIDA").\
filter((col("DATE") >= "strt_date") & (col("batchdate") < "end_date")).\
withColumn("file_name",input_file_name()).\
show(10,False)