如何在 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 中将文件路径值读取为列?的主要内容,如果未能解决你的问题,请参考以下文章

在 Spark SQL (pyspark) 中将行转置为列

关于如何在Scala编程中将文件值存储到变量中

如何读取 CSV 文件,然后在 Spark Scala 中将其保存为 JSON?

如果列值取决于文件路径,有没有办法在一次读取多个文件时将文字作为列添加到 spark 数据框中?

Spark---如何打成jar包至服务器运行

如何在javascript的引导数据表中将参数字符串转换为列或已知对象