如何在 Spark 中将文件路径值读取为列?
Posted
技术标签:
【中文标题】如何在 Spark 中将文件路径值读取为列?【英文标题】:How to read file path values as columns in Spark? 【发布时间】:2021-12-21 10:10:01 【问题描述】:我在 Azure Synapse Notebooks 中工作,并从格式良好的文件夹路径将读取文件读入 Dataframe,如下所示:
鉴于该通配符引用了许多文件夹,我如何将“状态”值捕获为生成的 Dataframe 中的一列?
【问题讨论】:
是的,但它包含整个文件路径,而不是 HDFS 命名的小节。 试试:df = spark.read.load("abfss://....dfs.core.windows.net/")
,spark可以直接读取文件夹,df应该包含state
列。
OH @Steven - 我看到你在那里做了什么 - 如果我没有在路径中指定通配符,那么我将路径值作为列。这对我有用 - 如果您将其添加为答案,我会接受它。
【参考方案1】:
无需使用通配符*
。
试试看:df = spark.read.load("abfss://....dfs.core.windows.net/")
Spark 可以直接读取分区文件夹,然后df
应该包含具有不同值的state
列。
【讨论】:
将此标记为答案,并指出不同之处在于删除了“/State=*/.snappy.parquet”——这显然允许 Spark 自动将路径值添加为列。 【参考方案2】:使用input_file_name
函数获取完整的输入路径,然后应用regexp_extract
提取你想要的部分。
例子:
df.withColumn("filepath", F.input_file_name())
df.withColum("filepath", F.regexp_extract("filepath", "State=(.+)\.snappy\.parquet", 1)
【讨论】:
谢谢,我真的在想(希望?)这在不手动解析文件路径的情况下是可能的。以上是关于如何在 Spark 中将文件路径值读取为列?的主要内容,如果未能解决你的问题,请参考以下文章
如何读取 CSV 文件,然后在 Spark Scala 中将其保存为 JSON?