【发布时间】:2020-06-13 19:55:54
【问题描述】:
我在Pyspark 中有一个变量,如下所示
range = (
(load_date='2020-06-10' AND critical in ('2', '3', '4') OR
(load_date='2020-06-11' AND critical in ('1', '2', '3', '4') OR
(load_date='2020-06-12' AND critical in ('1', '2', '3', '4') OR
(load_date='2020-06-13' AND critical in ('1', '2', '3')
)
现在我想读取格式如下的hive 表分区数据文件
/user/$USER/load_date=2020-06-10/critical=2/some_files
/user/$USER/load_date=2020-06-10/critical=3/some_files
/user/$USER/load_date=2020-06-10/critical=4/some_files
/user/$USER/load_date=2020-06-11/critical=1/some_files
/user/$USER/load_date=2020-06-11/critical=2/some_files
/user/$USER/load_date=2020-06-11/critical=3/some_files
/user/$USER/load_date=2020-06-11/critical=4/some_files
/user/$USER/load_date=2020-06-12/critical=1/some_files
/user/$USER/load_date=2020-06-12/critical=2/some_files
/user/$USER/load_date=2020-06-12/critical=3/some_files
/user/$USER/load_date=2020-06-12/critical=4/some_files
/user/$USER/load_date=2020-06-13/critical=1/some_files
/user/$USER/load_date=2020-06-13/critical=2/some_files
/user/$USER/load_date=2020-06-13/critical=3/some_files
由于我只能访问 hive 表的 hdfs 路径而不是实际表,因此我无法直接从 hive 表创建数据框
现在使用这些文件,我想创建一个如下所示的数据框。
df = spark.read
.option("basePath", "/user/$USER")
.parquet("/user/$USER/load_date=2020-06-10/critical=2/some_files",
"/user/$USER/load_date=2020-06-10/critical=3/some_files",
"/user/$USER/load_date=2020-06-10/critical=4/some_files",
"/user/$USER/load_date=2020-06-11/critical=1/some_files",
"/user/$USER/load_date=2020-06-11/critical=2/some_files",
"/user/$USER/load_date=2020-06-11/critical=3/some_files",
"/user/$USER/load_date=2020-06-11/critical=4/some_files",
"/user/$USER/load_date=2020-06-12/critical=1/some_files",
"/user/$USER/load_date=2020-06-12/critical=2/some_files",
"/user/$USER/load_date=2020-06-12/critical=3/some_files",
"/user/$USER/load_date=2020-06-12/critical=4/some_files",
"/user/$USER/load_date=2020-06-13/critical=1/some_files",
"/user/$USER/load_date=2020-06-13/critical=2/some_files",
"/user/$USER/load_date=2020-06-13/critical=3/some_files")
我能够创建数据框,但是以这种方式传递所有文件路径是一种乏味且不是最佳方式的方式。我想以更简单的动态方式来做到这一点
我已经尝试过如下
df = spark.read
.option("basePath", "/user/$USER")
.parquet("/user/$USER/load_date=*/critical=*")
上述方法也适用并创建数据框。
但对我来说问题是,如果我使用上述方法,那么我可能会有更多不需要的数据。
例如如果我有一个文件路径
"/user/$USER/load_date=2020-06-13/critical=4/some_files"
我暂时不想读取上述路径中的文件。
requirement
使用range 变量提取load_date 和critical 值并仅读取这些文件路径
我怎样才能做到这一点?
【问题讨论】:
-
您可以生成一个包含所有必需路径的
list并将其传递给read方法。 -
@VamsiPrabhala 请告诉我如何从变量生成列表。我是python的新手
标签: python apache-spark pyspark