python - Pyspark:仅读取特定日期的 ORC 数据

标签 python apache-spark pyspark orc

我在 ORC 中存储了 3 个数据文件,按日期分区。

/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/")

我将如何读取每个表的整周数据?

而且,假设我有一个月的数据,我只能在第一周阅读吗?或者我是否必须阅读整个月,然后筛选出我想要的日期?

我是否需要调整文件结构并将输出的数据保存到此以便于读入?

/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

等...

非常感谢任何帮助!

最佳答案

如果将结构更改为日期,则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)

关于python - Pyspark:仅读取特定日期的 ORC 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61824247/

相关文章:

python - CSV 到 JSON 转换器(按相同键值分组)

apache-spark - Spark+yarn - 使用输入大小缩放内存

scala - spark 按类型选择列

apache-spark - 数据框检查点示例 Pyspark

pandas - pyspark 的 pandas 中的 flatMap

python - 在生成器上使用枚举来解析文本

python - 基本镜像满足tensorflow版本,但docker仍然从requirements.txt下载tensorflow

python - 在没有 numpy 的情况下搜索二维列表

scala - 从 RDD 访问 KafkaOffset 时出现异常

pyspark - Spark 数据帧 CSV 与 Parquet