使用通配符获取文件名而不加载文件

问题描述 投票:0回答:1

我想加载以“Products”开头的特定文件,但“Products_expired”除外 因为“产品”之后会有日期戳,例如:Products_202410。现在通配符将读取链接内的所有文件,我想过滤掉Products_expired。这两个文件都有超过 1 亿行,加载文件后使用 input_file_name() 获取名称会很昂贵。

此外,如果文件路径有多个文件,例如:Products_202409、Products_202410、Products_202411、Products_expired_202409、Products_expired_202410...我只想摄取 3 个文件:Products_202409、Products_202410、Products_202411,使用 Spark 技术(优化),无需昂贵的 forloops /附加函数。

如果spark.read.load("abfss://[email protected]/data/testing/PRODUCTS_Expired_.csv")包含“过期”: mssparkutils.notebook.exit(send_email("[电子邮件受保护]", "已过期", "失败")) 其他:
df = Spark.read.load("abfss://[电子邮件受保护]/data/testing/PRODUCTS_
.csv")

解决方案供参考

pyspark path azure-synapse read.csv
1个回答
0
投票

在数据块上你可以做这样的事情

pathh="dbfs:/FileStore/test_only/check"
new_list=[]
for x in dbutils.fs.ls(pathh):
    print(x[0])
    if ('Products' in x[0])  & (~('expired' in x[0])):
        new_list.append(x[0])

df=spark.read.csv(new_list[0:3])
© www.soinside.com 2019 - 2024. All rights reserved.