pyspark 使用变量(f)-存储在json中的字符串

jdzmm42g  于 2022-11-01  发布在  Spark
关注(0)|答案(1)|浏览(123)

我有一个json配置文件,其中存储了数据路径
数据以月和日为单位进行存储,因此如果没有json,我将使用如下的f字符串:

spark.read.parquet(f"home/data/month={MONTH}/day={DAY}")

现在我想从json中提取它。但是,我遇到了Month和day变量的问题。我不想在json中分割路径。但是这样写:

{
    "path":"home/data/month={MONTH}/day={DAY}"
}

并加载:

DAY="1"
MONTH="12"
conf_path=pandas.read_json("...")
path=conf_path["path"]
data=spark.read_parquet(f"{path}")

实际上并不起作用。
你能告诉我一个解决方案吗?检索一个带有变量元素的路径并在阅读后填充它们?你将如何存储路径或检索它而不拆分路径?谢谢

-------编辑:解决方案-------

感谢下面Deepak Tripathi的回答,答案是使用字符串格式。
代码如下:

day="1"
month="12"
conf_path=pandas.read_json("...")
path=conf_path["path"]
data=spark.read_parquet(path.format(MONTH=month, DAY=day))
bf1o4zei

bf1o4zei1#

您应该使用string.format()而不是f-strings
如果你想使用f-strings,那么你应该像这样使用eval,它不安全

DAY="1"
MONTH="12"
df = pd.DataFrame(
    [{
    "path":"home/data/month={MONTH}/day={DAY}"
 },
 {
    "path":"home/data/month={MONTH}/day={DAY}"
 }
]
)
a = df['path'][0]
print(eval(f"f'{a}'"))

# home/data/month=12/day=1

相关问题