是火花编程的新手,并对使用pyspark读取分区表的方法有疑问。
让我们说我们有一个分区如下的表:
~/$table_name/category=$category/year=$year/month=$month/day=$day
现在,我想从所有类别中读取数据,但希望按时间段限制数据。有什么方法可以用通配符指定它,而不是写出所有单独的路径吗?
影响
table_path = ["~/$table_name/category=*/year=2019/month=03",
"~/$table_name/category=*/year=2019/month=04"]
table_df_raw = spark.read.option(
"basePath", "~/$table_name").parquet(*table_path)
此外,由于奖金是一种更有效的方式来指定可能落在不同年份的时间范围,而不是单独列出路径。
编辑:为了澄清一些事情,我无权访问此表的配置单元元存储,因此无法仅通过SQL查询进行访问。另外,数据的大小不允许过滤转换后的数据框。
答案 0 :(得分:0)
You can try this
Wildcards can also be used to specify a range of days:
table_df_raw = spark.read
.option("basePath", "~/$table_name")
.parquet("~/$table_name/category=*/year=2019/month={3,4,8}")
Or
table_df_raw = spark.read
.option("basePath", "~/$table_name")
.parquet("~/$table_name/category=*/year=2019/month=[3-4]")
答案 1 :(得分:0)
您是否正在使用Hortonworks HDP集群?如果是,请尝试使用HiveWarehouse连接器。它允许Spark访问Hive目录。之后,您可以对配置单元表执行任何Spark SQL命令:https://community.hortonworks.com/articles/223626/integrating-apache-hive-with-apache-spark-hive-war.html
如果您不使用Hortonworks,建议您查看以下链接:https://acadgild.com/blog/how-to-access-hive-tables-to-spark-sql